首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中构建基于用户的协同过滤推荐系统

在R中构建基于用户的协同过滤推荐系统
EN

Stack Overflow用户
提问于 2015-11-24 00:47:32
回答 1查看 1.6K关注 0票数 2

我有一个129539行530列的矩阵。第一列对应于ClientID,第一行对应于产品品牌。在里面,我有一个排名索引,每个ClientID都有每个产品品牌的排名(如果ClientID从未购买过该产品,则为0,否则一直到10 )。

我正在用R构建一个基于用户的协同过滤推荐系统,使用前5000行进行训练,它给出的输出对我来说没有意义。

我必须生成的代码如下:

# Loading to pre-computed affinity data

affinity.data <-read.csv("mydirectory")

affinity.matrix <- as(affinity.data,"realRatingMatrix")

# Creation of the model - U(ser) B(ased) C(ollaborative) F(iltering)

Rec.model <- Recommender(Rank_dataframe[1:5000,],method="UBCF", param=list(normalize = "Z-score",method="Cosine",nn=5, minRating=0))

# recommended top 5 items for user 1507323

recommended.items.1507323 <- predict(Rec.model, affinity.matrix["1507323",], n=5) # to display them

as(recommended.items.1507323, "list")

我得到的输出是一个值列表,如下所示:

[[1]] [1] "0.0061652281134402" "0.00661813368630046" "0.0119331742243437" "0.0136147038801906" [5] "0.0138312586445367"

我期待的是我想推荐的品牌的名称,而不是一系列的数字。PS:我的原始矩阵的值从0到10 (包括小数,而不仅仅是整数)

非常感谢您的帮助或澄清。

EN

回答 1

Stack Overflow用户

发布于 2017-01-24 04:24:32

这里有两个问题:首先,predict()函数将为您选择的用户返回每个项目的预测评分。如果你想推荐一个排名前N的列表,你必须预测该用户的每个项目的评分,然后对评分进行排序并返回前N名。

其次,当用户和项目从未交互时,推荐系统通常使用NULL或NA或缺少数据。您已经为此使用了0。这意味着预测将严重偏向于0(假设大多数用户不与大多数项目交互),而您的预测实际上是用户与项目交互的概率。这可能是一个特性,也可能是一个bug,这取决于您的用例。但如果你的评分1-10代表偏好,0代表使用/不使用的二进制,那么你就是在混合信息,你应该用NA替换0。

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

https://stackoverflow.com/questions/33876272

复制
相关文章

相似问题

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