楼主: daishen
13714 9

[程序分享] 用户推荐协同过滤算法(UserCF)的R实现 [推广有奖]

  • 0关注
  • 10粉丝

已卖:127份资源

博士生

6%

还不是VIP/贵宾

-

威望
0
论坛币
3155 个
通用积分
51.3742
学术水平
67 点
热心指数
68 点
信用等级
42 点
经验
3733 点
帖子
111
精华
0
在线时间
324 小时
注册时间
2014-9-14
最后登录
2016-3-10

楼主
daishen 发表于 2014-10-12 14:31:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

张丹在这篇博客http://blog.fens.me/r-mahout-usercf/里给出了协同过滤算法的R代码,但是其本身使用过多的for循环,影响了代码的执行效率,同时也没有把R语言的特色给体现出来。

现用R重新写一遍,看看使用 for和不用for的差别。数据在他的博客中下载。


比如第四部分的推荐算法,左一个for,右一个for,搞的人头昏,其实就是一个简单的加权平均。

4). 推荐算法

RECOMMENDER_NUM = 3

UserBasedRecommender = function(uid,n,M,S,N){

                        part = colnames(M)[is.na(M[uid,])]

                        m = S[uid, N[uid,]]

                        md = M[N[uid,],part]

                        if(length(dim(md)) >= 1) {

                                        a = colnames(md)[colSums(is.na(md)) == 0]

                                        score = colSums(md*m,na.rm = T)/apply(!is.na(md),2,function(x) sum(m[x]))

                                        res = score[order(score,decreasing=T)][1:n]

                                       res = res[intersect(names(res),a)]

                                       return(res)

                                       } else { res = NA}

                       }

5). 运行程序

R1 = UserBasedRecommender(1,RECOMMENDER_NUM,M,S,N);

R1

104  106

4.25 4.00  

用户推荐协同过滤算法.doc (24 KB, 需要: 5 个论坛币)



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:USERCF 协同过滤 过滤算法 User R实现 协同 用户

已有 1 人评分经验 收起 理由
李会超 + 80 精彩帖子

总评分: 经验 + 80   查看全部评分

沙发
李会超(未真实交易用户) 发表于 2014-10-14 22:46:24
看看如何

藤椅
pilixiaopang(真实交易用户) 发表于 2015-2-24 22:42:18
楼主 这个 testCF.csv的数据在哪里呀? uid iid 和 pref分别指的是什么呢

板凳
linsnowx(未真实交易用户) 发表于 2016-3-24 14:41:37
点那个连接就能看到数据 了http://blog.fens.me/r-mahout-usercf/

报纸
testweka(未真实交易用户) 发表于 2016-3-31 23:25:32
不错的资料!!!

地板
ChanyingLi(未真实交易用户) 发表于 2016-12-25 11:52:11
你好  里面apply(!is.na(md),2,function(x) sum(m[x]))  看不懂  不懂在function 和x的用法

7
ChanyingLi(未真实交易用户) 发表于 2016-12-25 14:56:51
ChanyingLi 发表于 2016-12-25 11:52
你好  里面apply(!is.na(md),2,function(x) sum(m[x]))  看不懂  不懂在function 和x的用法
为什么最后推荐算法不用加上预测用户的均值呢 一加上就错  

8
zl66983279(未真实交易用户) 在职认证  发表于 2017-1-4 17:15:10
ChanyingLi 发表于 2016-12-25 11:52
你好  里面apply(!is.na(md),2,function(x) sum(m[x]))  看不懂  不懂在function 和x的用法
function(x) sum(m[x])这种叫匿名函数,可以不事先定义函数就调用,多用于简单小函数,如果还是不能理解可以再查些资料。

9
烟酒豆(真实交易用户) 发表于 2018-4-11 08:39:23
楼主好棒

10
shihuan963(真实交易用户) 发表于 2020-4-4 20:38:32
这段代码有详细的注释吗

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 21:55