我正在尝试mahout并想知道输入数据模型
表示非分发版
文件datamodel必须遵循:userid,itemid,userPreference 问题是我没有这个用户首选项值,必须预先计算它 mahout有没有办法做到这一点?
我找到了一篇文章http://www.codeproject.com/Articles/620717/Building-A-Recommendation-Engine-Machine-Learning
作者似乎并没有真正的用户权限值,但他使用了org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -s SIMILARITY_COOCCURRENCE
从{userid,questionid}计算
从我可以看出,mahout似乎从数据计算偏好值然后计算推荐,在这种情况下我是否正确?
答案 0 :(得分:0)
如果您没有用户首选项值,可能您不需要它们。 Mahout提供了一种为用户推荐项目而不具有偏好值的实现。这被称为布尔首选项。基本上你只知道某些用户喜欢某个项目,但你不知道多少。有时这很好。
Bellow是一个示例代码,如何做到这一点。基本上只有第一行有所不同,您可以告诉您数据模型的类型为BooleanPrefDataModel
。然后使用布尔数据,您可以使用两种类型的相似性度量:LogLikelihoodSimilarity,TanimotoCoefficientSimilarity
。两者都可用于计算基于用户和基于项目的计算建议。
DataModel model = new GenericBooleanPrefDataModel( GenericBooleanPrefDataModel.toDataMap( new FileDataModel(new File("FILE_NAME"))));
UserSimilarity similarity = new LogLikelihoodSimilarity(model);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(10, similarity, model);
Reecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
List<RecommendedItem> recommendations = recommender.recommend(1, 10);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
另一种方法是计算mahout之外的偏好值,并在一些其他用户或基于项目的算法中提供数据模型。但据我所知,mahout不提供计算偏好值的实现。
答案 1 :(得分:0)
您可以为数据模型定义首选项值(但这取决于您的数据模型)。例如,您的数据模型项是用户收听的曲目。可以定义首选项值user1侦听trackA x次。因此,应为每个userid-itemid唯一对定义数据模型的首选项值。
数据模型的例子:
用户ID,项ID,偏好
1,1,3 - 1,2,5 - .... - 5,1,2 ......等等。