用户用户协作过滤的模型创建

时间:2012-03-28 12:17:24

标签: model mahout collaborative-filtering mahout-recommender

我想进行一种用户 - 用户协同过滤,其中用户项矩阵中的用户是数据库中整个用户的选定部分。使用新选择的用户首选项定期刷新这些选定的用户。不应将新用户添加到矩阵中。对于新用户,基于他的偏好,我们需要推荐用户项目矩阵中的项目(其中只有一部分用户被选中)。我不想将新的匿名用户添加到矩阵中。

在Mahout探索,但需要一些帮助。    Mahout中的推荐类推荐使用user_id作为参数的(...)方法。这不是我想要的。该方法应该接受偏好,并且基于模型,应该推荐项目。怎么在Mahout做?我们可以使用PlusAnonymousUserDataModel ??

如果不是mahout,还有什么其他工具可以实现这一目标......

我与PlusAnonymousUserDataModel一起使用的代码,它没有为具有正常使用建议的用户提供任何建议。

    DataModel model = new GenericBooleanPrefDataModel( GenericBooleanPrefDataModel.toDataMap( new FileDataModel(f)));
    TanimotoCoefficientSimilarity similarity = new TanimotoCoefficientSimilarity(model);
    UserNeighborhood neighborhood = new NearestNUserNeighborhood(1000, similarity, model);
    new_user_preferences = { ... } // new user items..
    DataModel plusmodel = new PlusAnonymousUserDataModel(model);
    PreferenceArray anonymousPrefs = new GenericUserPreferenceArray(new_user_preference.length);
    anonymousPrefs.setUserID(0, PlusAnonymousUserDataModel.TEMP_USER_ID);
    for(int i = 0;i < new_user_preference.length;i++)
    {
      anonymousPrefs.setItemID(i, new_user_preference[i]);
    }
    PlusAnonymousUserDataModel plusAnonymousModel = (PlusAnonymousUserDataModel) plusmodel;
    Recommender recommender1 = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
    plusAnonymousModel.setTempPrefs(anonymousPrefs);
    List<RecommendedItem> recommendations1 = recommender1.recommend(plusAnonymousModel.TEMP_USER_ID, 10);

代码有问题吗?

2 个答案:

答案 0 :(得分:2)

是的,PlusAnonymousUserDataModel是您在Mahout中最接近您想要的东西。这是一个创可贴,但有效。

答案 1 :(得分:1)

sravan_kumar,如果您在3个地方用model替换plusAnonymousModel
TanimotoCoefficientSimilarity相似度=新的TanimotoCoefficientSimilarity(plusAnonymousModel);
  UserNeighborhood neighborhood = new NearestNUserNeighborhood(1000,similarity,plusAnonymousModel);
    推荐者推荐者1 =新的GenericBooleanPrefUserBasedRecommender(plusAnonymousModel,邻域,相似度);

并在初始化模型后正确初始化plusAnonymousModel:
PlusAnonymousUserDataModel plusAnonymousModel = new PlusAnonymousUserDataModel(model);
(当你使用它时,没有必要使用plusmodel变量)
,你会得到理想的结果!

另外,将GenericUserPreferenceArray更改为BooleanUserPreferenceArray:)