协同过滤算法R/mapreduce/火花mllib多语言实现

  



用户电影评分数据集下载

http://grouplens.org/datasets/movielens/


<强>

<强>

对用户的行为分析得到用户的喜好后,可以根据用户的喜好计算相似用户和物品,然后可以基于相似用户或物品进行推荐。这就是协同过滤中的两个分支了,基于用户的和基于物品的协同过滤。

在计算用户之间的相似度时,是将一个用户对所有物品的偏好作为一个向量,而在计算物品之间的相似度时,是将所有用户对某个物品的偏好作为一个向量。求出相似度后,接下来可以求相似邻居了。


<强>

<强>

<强>




适用场景










<强>


,,#引用plyr包   ,,,图书馆(plyr)   ,,,#读取数据集   ,,,train<-read.table(文件=" C:/用户/管理员/桌面/u.data”, 9=?”)   ,,,train<火车[1:3]   ,,,,   ,,,的名字(火车)& lt; - c(“用户”,“项目”,“参照”)   ,,,,   ,,,#计算用户列表方法   ,,,usersUnique<函数(){   ,,,,,users<独特(火车$用户)   ,,,,,用户(订单(用户))   ,,,}   ,,,,   ,,,,   ,,,#计算商品列表方法   ,,,itemsUnique<函数(){   ,,,,,items<独特(培训项目美元)   ,,,,,的物品(订单(项目))   ,,,}   ,,,,   ,,,#,用户列表   ,,,users<-usersUnique ()   ,,,#,商品列表   ,,,items<-itemsUnique (),   ,,,#建立商品列表索引   ,,,index<函数(x),而(items  % %, x)   ,,,data<-ddply(火车。(用户、项目”),总而言之,idx=指数(项),   ,,,,   ,,,#同现矩阵   ,,,cooccurrence<功能(数据){   ,,,,,n<长度(物品)   ,,,,,co<矩阵(代表(0 n * n), nrow=n)   ,,,,,(u 拷贝;用户){   ,,,idx<指数(数据项美元[(数据u $ user==)))   ,,,m<合并(idx idx)   ,,,(小姐:1:拷贝nrow (m)) {   ,,,,,公司[m x[我],美元$ y[我]]=有限公司[m x[我],美元$ y[我]]+ 1   ,,,}   ,,,,,}   ,,,,,返回(有限公司)   ,,,}   ,,,,   ,,,#推荐算法   ,,,recommend<函数(udata=https://www.yisu.com/zixun/udata,有限公司=coMatrix num=0) {   n <长度(物品)      #所有的参照   参照<代表(0,n)   参照[udata idx美元]<-udata参照美元      #用户评分矩阵   userx <矩阵(参照nrow=n)      #同现矩阵*评分矩阵   r <有限公司% * % userx      #推荐结果排序   #把该用户评分过的商品的推荐值设为0   r (udata idx美元)<0   idx <订单(r,减少=TRUE)   topn <-data.frame(用户=代表(udata用户[1],美元长度(idx)),项目=项目[idx], val=r [idx])   topn <-topn [(topn val> 0美元),)      #推荐结果取前num个   如果(num> 0) {   topn <?topn num)   }      #返回结果   返回(topn)   }      #生成同现矩阵   有限公司<共存(数据)   #计算推荐结果   推荐<-data.frame ()   (我在1:长度(用户)){   udata <拼((数据$ user==用户[我]),)   推荐<-rbind(推荐,推荐(udata有限公司0))   }



参考文章:

http://www.cnblogs.com/anny-1980/articles/3519555.html


代码下载

https://github.com/bsspirit/maven_hadoop_template/releases/tag/recommend





<强>

火花mllib里用的是矩阵分解的协同过滤,不是用户群也不是ItemBase。


参考文章:

http://www.mamicode.com/info细节- 865258. - html


<强>

<强>

import  org.apache.spark.SparkConf   import  org.apache.spark.mllib.recommendation。{ALS,, MatrixFactorizationModel,,评级}   import  org.apache.spark.rdd._   import  org.apache.spark.SparkContext   import  scala.io.Source         object  MovieLensALS  {      def 才能;主要(args:数组[String]), {      ,,,//设置运行环境      ,,,val  sparkConf =, new  SparkConf () .setAppName .setMaster (“MovieLensALS”)(“地方[5]”)      ,,,val  sc =, new  SparkContext (sparkConf)         ,,,//装载用户评分,该评分由评分器生成(即生成文件personalRatings.txt)      ,,,val  myRatings =, loadRatings (args (1))      ,,,val  myRatingsRDD =, sc.parallelize (myRatings, 1)         ,,,//样本数据目录      ,,,val  movielensHomeDir =, args (0)         ,,,//装载样本评分数据,其中最后一列时间戳取除10的余数作为关键,评级为值,即(Int,评级)      ,,,val  ratings =, sc.textFile (movielensHomeDir  +,/ratings.dat) .map  {      ,,,,,line =比;      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

协同过滤算法R/mapreduce/火花mllib多语言实现