1

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

在 Mahout 进行了探索,但在那里需要一些帮助。Mahout 中的 Recommender 类具有将 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);

代码有问题吗??

4

2 回答 2

2

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

于 2012-03-28T18:06:40.413 回答
1

sravan_kumar,如果在 3 个地方替换为:modelTanimotoCoefficientSimilaritysimilarity = new TanimotoCoefficientSimilarity(plusAnonymousModel); UserNeighborhood 邻域 = new NearestNUserNeighborhood(1000, 相似度, plusAnonymousModel); RecommenderRecommender1 = new GenericBooleanPrefUserBasedRecommender(plusAnonymousModel, 邻域, 相似度); plusAnonymousModel


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

另外,更改GenericUserPreferenceArrayBooleanUserPreferenceArray:)

于 2012-10-24T14:27:04.110 回答