张丹在博客里给出了协同过滤算法的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
下载来源:


雷达卡



京公网安备 11010802022788号







