首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Apache-mahout根据其他用户的喜好推荐用户。

使用Apache-mahout根据其他用户的喜好推荐用户。
EN

Stack Overflow用户
提问于 2015-07-30 07:42:52
回答 1查看 429关注 0票数 1

这是我在stackoverflow.com上的第一个问题,所以如果我犯了什么错误,很抱歉。

现在,我正在尝试使用apache在java中创建一个推荐引擎。我有一个如下所示的输入文件(当然,它会大得多):

代码语言:javascript
复制
 userID1 ItemID1  Rating1
 userID1 ItemID2  Rating2
 userID2 ItemID1  Rating3
 userID2 ItemID3  Rating4
 userID3 ItemID4  Rating5
 userID4 ItemID2  Rating6

我想要做的是,对每个用户,我想推荐一些其他用户根据他们的评级项目。让我们说,在我的程序结束时,输出将是

代码语言:javascript
复制
userID1  similar to UserID2  with score of 0.8 (This score could be a value between 0 and 1 or a percentage  only requirement is being reasonable)
userID1  similar to userID3  with score of 0.7
userID2  similar to UserID1  with score of 0.8
userID2  similar to userID4  with score of 0.5
userID3  similar to userID1  with score of 0.7
userID4  similar to userID2  with score of 0.5

诸若此类。为此,我编写了以下代码。

代码语言:javascript
复制
public void RecommenderFunction()
{
        DataModel model = new FileDataModel(new File("data/dataset.csv")); 
        UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
        UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0, similarity, model);
        UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

        for(LongPrimitiveIterator users=model.getUserIDs();users.hasNext();)
        {
            long userId=users.nextLong();
            long[] recommendedUserIDs=recommender.mostSimilarUserIDs(userId, 100); // I want to find all similarUserIDs not a subset of it.Thats why I put 100 as a second argument.

            for(long recID:recommendedUserIDs)
            {
                System.out.println("user:"+userId+" similar with:"+recID);
            }

        }


}

这是我的dataset.csv文件

代码语言:javascript
复制
1,10,1.0
1,11,2.0
1,12,5.0
1,13,5.0
1,14,5.0
1,15,4.0
1,16,5.0
1,17,1.0
1,18,5.0
2,10,1.0
2,11,2.0
2,15,5.0
2,16,4.5
2,17,1.0
2,18,5.0
3,11,2.5
3,12,4.5
3,13,4.0
3,14,3.0
3,15,3.5
3,16,4.5
3,17,4.0
3,18,5.0
4,10,5.0
4,11,5.0
4,12,5.0
4,13,0.0
4,14,2.0
4,15,3.0
4,16,1.0
4,17,4.0
4,18,1.0

这是我为这个数据集编写的程序的结果:

代码语言:javascript
复制
user:1 similar with:2
user:1 similar with:3
user:1 similar with:4
user:2 similar with:1
user:2 similar with:3
user:2 similar with:4
user:3 similar with:2
user:3 similar with:1
user:3 similar with:4
user:4 similar with:3
user:4 similar with:1
user:4 similar with:2

我知道,由于我将100作为上述函数的第二个参数,因此推荐程序会返回所有用户之间的相似之处。我的问题从这里开始。我的程序能够告诉我哪些用户是相似的。然而,我找不到一种方法来获得他们的相似性评分。我怎么能这么做?

编辑

我认为,pearson系数相似性结果可以用来验证建议。我的逻辑错了吗?我的意思是,我用以下方式修改了上面的代码:

代码语言:javascript
复制
 public void RecommenderFunction()
    {
        // same as above.
            for(LongPrimitiveIterator users=model.getUserIDs();users.hasNext();)
            {
                // same as above.

                for(long recID:recommendedUserIDs)
                {
                    // confidence score of recommendation is the pearson correlation score of two users. Am I wrong?
                    System.out.println("user:"+userId+" similar with:"+recID+" score of: "+similarity.userSimilarity(userId, recID));
                }

            }


    }
EN

回答 1

Stack Overflow用户

发布于 2015-07-31 14:53:19

这是一个很好的开始。请记住,用户-用户相似度值用于创建项目推荐,因此您不能再次使用相似分数来验证推荐质量。现在您已经有了用户-用户相似性评分,请使用Mahout为所有用户生成项目建议。当你做到这一点的时候,你可以通过对你的推荐人隐藏一些数据来测试你的推荐的质量,看看它为那些隐藏的评级预测了什么,然后测量预测有多近。这是一种形式的推荐评估(在许多),它被称为预测准确性。一个常见的度量是RMSE,或根均方误差。有了这样一个度量标准,你就可以看到你的推荐人表现得有多好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31717909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档