楼主: daishen
2664 1

[R] 用户推荐协同过滤算法(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 发表于 2015-3-2 15:50:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

      张丹在博客里给出了协同过滤算法的R代码,但是其本身使用过多的for循环,影响了代码的执行效率,同时也没有把R语言的特色给体现出来。


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


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


4、推荐算法

  1. RECOMMENDER_NUM = 3
  2. UserBasedRecommender = function(uid,n,M,S,N){
  3.                         part = colnames(M)[is.na(M[uid,])]
  4.                         m = S[uid, N[uid,]]
  5.                         md = M[N[uid,],part]
  6.                         if(length(dim(md)) >= 1) {
  7.                                         a = colnames(md)[colSums(is.na(md)) == 0]
  8.                                         score = colSums(md*m,na.rm = T)/apply(!is.na(md),2,function(x) sum(m[x]))
  9.                                         res = score[order(score,decreasing=T)][1:n]
  10.                                        res = res[intersect(names(res),a)]
  11.                                        return(res)
  12.                                        } else { res = NA}
  13.                        }
复制代码


5、运行程序


  1. R1 = UserBasedRecommender(1,RECOMMENDER_NUM,M,S,N);
  2. R1
  3. 104  106
  4. 4.25 4.00  
复制代码



下载来源:

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



二维码

扫码加我 拉你入群

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

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

关键词:USERCF User 协同过滤 过滤算法 R实现 协同过滤 USERCF 改进 推荐算法

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 60  论坛币 + 60  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

本帖被以下文库推荐

沙发
xddlovejiao1314 学生认证  发表于 2015-9-24 11:58:33
谢谢分享。
已有 1 人评分论坛币 热心指数 收起 理由
niuniuyiwan + 5 + 1 精彩帖子

总评分: 论坛币 + 5  热心指数 + 1   查看全部评分

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-25 10:59