日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RHadoop协同过滤算法

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RHadoop协同过滤算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

################################################################################################### ##第一步,建立物品的共現矩陣:對用戶分組,找到每個用戶所選的物品,單獨出現計數,及兩兩一組計數。 ################################################################################################### ##加載plyr和rmr2包 library(plyr) library(rmr2) ##輸入數據文件 train <- read.csv(file="/home/hyxy/Downloads/small.csv",header=FALSE) names(train) <- c("user","item","pref") ##使用rmr的hadoop格式,hadoop是默認設置 rmr.options(backend='hadoop') ##設置數據到HDFS上 train.hdfs=to.dfs(keyval(train$user,train)) ##從hdfs上查看數據 from.dfs(train.hdfs) ######################################################### ##記錄重要點: ##train.mr:這是MapReduce任務的key-value信息模型 ##key:這是物品向量列表 ##value:這是物品聯合向量 ###########################################################MapReduce任務1:物品共現矩陣 train.mr <- mapreduce(train.hdfs,map=function(k,v){keyval(k,v$item)},##識別共現物品reduce=function(k,v){m <- merge(v,v)keyval(m$x,m$y)})########################################################## ##對物品組合列表進行計數,建立物品的同現矩陣。 ##定義MapReduce任務,step2.mr被用來計算聯合物品的頻率。 ##Step2.mr:這是MapReduce任務的key-value信息模型 ##key:這是物品向量列表 ##value:這是數據框value(item,item,Freq)的共現矩陣 ############################################################MapReduce函數:計算聯合物品頻率step2.mr <- mapreduce(train.mr,map=function(k,v){d <- data.frame(k,v)d2 <- ddply(d,.(k,v),count)key <- d2$kval <- d2keyval(key,val)})########################################################## ##第二步,建立用戶對物品的評分矩陣 ##train2.mr:這是MapReduce任務的key-value信息模型 ##key:這是物品向量列表 ##value:這是用戶物品評分矩陣的值 ############################################################MapReduce任務:建立用戶對物品的評分矩陣train2.mr <- mapreduce(train.hdfs,map=function(k,v){df <- v##物品的keykey <- df$item##[item,user,pref]的valueval <- data.frame(item=df$item,user=df$user,pref=df$pref)##頒布(key,value)對keyval(key,val)}) ##從HDFS加載數據from.dfs(train2.mr)########################################################### ##以下是合并和共現評分矩陣: ##eq.hdfs:這是MapReduce任務的key-value信息模型 ##key:key在這里是NULL ##value:這是合并的數據框值 #############################################################運行equi連接兩個數據-step2.mr和train2.mreq.hdfs <- equijoin(left.input=step2.mr,right.input=train2.mr,map.left=function(k,v){keyval(k,v)},map.right=function(k,v){keyval(k,v)},outer=c("left")) ##從HDFS加載數據from.dfs(eq.hdfs)############################################################ ##第三步,生成推薦部分,我們將獲得結果的推薦列表 ##Cal.mr:這是MapReduce任務的key-value信息模型 ##key:這是物品向量列表 ##value:這是被推薦的結果的數據框值 ##############################################################MapReduce任務:從equi連接數據中獲得被推薦的結果列表cal.mr <- mapreduce(input=eq.hdfs,map=function(k,v){val <- vna <- is.na(v$user.r)if(length(which(na))>0) val <- v[-which(is.na(v$user.r)),]keyval(val$k.l,val)},reduce=function(k,v){val <- ddply(v,.(k.l,v.l,user.r),summarize,v=freq.l*pref.r)keyval(val$k1,val)}) ##從HDFS加載數據from.dfs(cal.mr)############################################################################ ##第四步:定義結果:獲得被推薦物品相關值得列表,評分進程被應用到推薦結果上 ##result.mr:這是MapReduce任務的key-value信息模型 ##key:這是用戶ID ##value:這是被推薦的結果,數據框value #####################################################################MapReduce任務:評分推薦輸出result.mr <- mapreduce(input=cal.mr,map=function(k,v){keyval(v$user.r,v)},reduce=function(k,v){val <- ddply(v,.(user.r,v.l),summarize,v=sum(v))val2 <- val[order(val$v,decreasing=TRUE),]names(val2) <- c("user","item","pref")keyval(val2$user,val2)})from.dfs(result.mr) small.csv數據集:
11015
11023
11032.5
21012
21022.5
21035
21042
31012
31044
31054.5
31075
41015
41033
41044.5
41064
51014
51023
51032
51044
51053.5
51064


總結

以上是生活随笔為你收集整理的RHadoop协同过滤算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。