Taste item-item recommender example
I threw together a Mahout/Taste based item-item based recommender last night.
public static void itemItemRecommendations(String path, String file) { File f = new File(path, file); try { DataModel model = new FileDataModel(f); model.refresh(null); ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(model); ItemBasedRecommender itemRecommender = new GenericItemBasedRecommender(model, itemSimilarity); for ( Item i : model.getItems() ) for ( RecommendedItem j : itemRecommender.mostSimilarItems(i.getID(), 50) ) if ( j.getValue() >= 0.7 ) System.out.println(i.getID() + "\t" + j.getItem().getID() + "\t" + String.format("%.3f", j.getValue())); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TasteException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
This outputs item1 –recommends–>item2 pairs with a weight. I’m taking this and putting it into a solr document so I can display related item2s alongside item1 when it’s viewed.
Input data are comma-delimited
1fe7401b81eed49353d0cbeba5383848,5212,0.6 3c1832954a6e8781836fed670bb37b24,5212,1 70273e4c7c77700ee97acb8d0306c405,5213,0.8 1f057ccde135acbc881008bbf466e7e1,5213,1 51d44c7baca65ad39d11ba87bf2d438b,5213,1 adc924559b37114cd97d1f5cf7c71419,5213,1 78e254b4a11e61d76ff63cea02de4de8,5213,1 5c373ec7d9ad4a6f392c291d8ccba5ce,5213,0.2 fab8537564094fa8885f6214e6b682e1,5213,1 127f46aabcdbc2d2d04da8398a996c75,5213,1
Works great. Thanks Sean.