环境:
<dependency> <groupId>org.apache.mahout</groupId> <artifactId>mahout-core</artifactId> <version>0.8</version> </dependency> <dependency> <groupId>org.apache.mahout</groupId> <artifactId>mahout-math</artifactId> <version>0.8</version> </dependency> <dependency> <groupId>org.apache.mahout</groupId> <artifactId>mahout-integration</artifactId> <version>0.8</version> </dependency>
概述:
基于item的相似,首先基于用户评分矩阵构建item之间的相似矩阵,从而对用户感兴趣的item做相关tiem的推荐。
应用:
private static ItemSimilarity getISInstance(DataModel model, int i)
throws Exception {
ItemSimilarity instance = null;
switch (i) {
case 0:
instance = new TanimotoCoefficientSimilarity(model);
break;
case 1:
instance = new EuclideanDistanceSimilarity(model);
break;
case 2:
instance = new LogLikelihoodSimilarity(model);
break;
case 3:
instance = new CityBlockSimilarity(model);
break;
case 4:
instance = new UncenteredCosineSimilarity(model);
break;
}
return instance;
}
测试:
public static void test(File dataFile) throws Exception {
DataModel model = new FileDataModel(dataFile);
for (int i = 0; i < 5; i++) {
ItemSimilarity itemSimilarity = getISInstance(model, i);
ItemBasedRecommender recommender = new GenericItemBasedRecommender(
model, itemSimilarity);
List<RecommendedItem> recommendations = recommender
.mostSimilarItems(107, 1000);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation.getItemID() + "->"
+ recommendation.getValue());
}
System.out.println("******************");
}
}
效果对比:
推荐TanimotoCoefficientSimilarity和EuclideanDistanceSimilarity,使用场景不一样,大家根据效果进行选用