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



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

在马胡特进行了探索,但需要一些帮助。Mahout中的Recommender类有一个以user_id为参数的Recommender(…)方法。这不是我想要的。该方法应接受偏好,并根据模型推荐项目。在马胡特怎么做??我们可以使用PlusAnonymousUserDataModel吗??

如果不是驯马师,还有什么工具可以做到这一点。。。

我在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);

代码有问题吗??

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

sravan_kumar,如果在3个位置用plusAnonymousModel替换model
TanimotoCoefficientSimilarity similarity=新的TanimotocoefficientSamilarity(加匿名模型)
UserNeighborhood邻域=新的最近NUserNeighbor(1000,相似性,加匿名模型)
Recommender recommender1=new GenericBooleanPrefUserBasedRommender(加匿名模型,邻域,相似性);

并在初始化模型后立即初始化plusAnonymousModel:
PlusAnonymousUserDataModel plusAnonymousModel=新的PlusAnonmyousUserDatamodel(模型)
(使用plusmodel变量时不需要它)
,你会得到想要的结果!

此外,将GenericUserPreferenceArray更改为BooleanUserPreferenceArray:)

相关内容

  • 没有找到相关文章

最新更新