如何在mahout datamodel中获取用户首选项

时间:2014-02-25 13:52:59

标签: mahout recommendation-engine mahout-recommender

我正在尝试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似乎从数据计算偏好值然后计算推荐,在这种情况下我是否正确?

2 个答案:

答案 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 ......等等。