0

我正在尝试 mahout 并想知道输入数据模型

对于非分布式版本

文件数据模型必须遵循: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 似乎从数据中计算偏好值然后计算推荐,在这种情况下我是否正确?

4

2 回答 2

0

如果您没有用户偏好值,也许您不需要它们。Mahout 提供了一种为用户推荐项目而没有偏好值的实现。这称为布尔偏好。基本上你只知道一些用户喜欢某个项目,但你不知道有多少。有时这很好。

波纹管是如何做到这一点的示例代码。基本上只有第一行不同,你告诉你的数据模型是 type 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 不提供计算偏好值的实现。

于 2014-02-26T08:14:44.007 回答
0

您可以为您的数据模型定义偏好值(但是,这取决于您的数据模型)。例如,您的数据模型项是用户收听的曲目。偏好值可以定义为 user1 听 trackA x 次。因此,应该为每个 userid-itemid 唯一对定义数据模型的偏好值。

数据模型示例:

用户名、项目名称、首选项

1,1,3 - 1,2,5 - .... - 5,1,2... 以此类推。

于 2014-05-29T23:42:43.780 回答