###################################################################################################
##第一步,建立物品的共现矩阵:对用户分组,找到每个用户所选的物品,单独出现计数,及两两一组计数。
###################################################################################################
##加载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数据集:

1 101 5
1 102 3
1 103 2.5
2 101 2
2 102 2.5
2 103 5
2 104 2
3 101 2
3 104 4
3 105 4.5
3 107 5
4 101 5
4 103 3
4 104 4.5
4 106 4
5 101 4
5 102 3
5 103 2
5 104 4
5 105 3.5
5 106 4

RHadoop协同过滤算法相关推荐

  1. 基于协同过滤算法实现选课推荐系统

    新版本教务管理系统 教务管理系统 选课功能 1.系统功能 1.用户账户管理 2.学生个人信息的查看与修改 3.学生的网上选课与课程的评分 4.教师个人信息的查看与修改 5.教师对学生课程评价结果的查看 ...

  2. 基于协同过滤算法的推荐

    2019独角兽企业重金招聘Python工程师标准>>> 基于协同过滤算法的推荐 (本实验选用数据为真实电商脱敏数据,仅用于学习,请勿商用) 数据挖掘的一个经典案例就是尿布与啤酒的例子 ...

  3. 协同过滤算法 R/mapreduce/spark mllib多语言实现

    用户电影评分数据集下载 http://grouplens.org/datasets/movielens/ 1) Item-Based,非个性化的,每个人看到的都一样 2) User-Based,个性化 ...

  4. 推荐系统之基于邻域的算法-------协同过滤算法

    基于邻域的协同过滤主要分为两类,基于用户的协同过滤和基于物品的协同过滤.前者给用户推荐和他兴趣相似的其他用户喜欢的物品,后者则是推荐和他之前喜欢过的物品相似的物品. 基于用户的协同过滤算法 这里介绍基 ...

  5. 推荐系统--基于用户的协同过滤算法

    1.         概述 和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息. 和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户 ...

  6. 基于Spark MLlib平台的协同过滤算法---电影推荐系统

    协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析     一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,协同过滤算法按照数据使用 ...

  7. 探秘推荐引擎之协同过滤算法小综述

    数学大神.统计学大神和数据挖掘推荐大神请关注. 一.数学期望的理解 早些时候,法国有两个大数学家,一个叫做布莱士·帕斯卡,一个叫做费马.帕斯卡认识两个赌徒,这两个赌徒向他提出了一个问题.他们说,他俩下 ...

  8. [推荐算法]ItemCF,基于物品的协同过滤算法

     [推荐算法]ItemCF,基于物品的协同过滤算法 标签: ItemCF基于用户的协同过滤算法 2015-03-09 15:11 4144人阅读 评论(1) 收藏 举报 本文章已收录于: 分类: ...

  9. Apache Mahout基于商品的协同过滤算法流程分析

    最近使用mahout的itemBase协同过滤算法,研究了下他的源码,记录如下,以备后忘-- 其算法实现大致分四个主要的部分: 1.将输入数据转化成矩阵 2.计算相似性 3.还是转化数据格式,为计算预 ...

  10. 【推荐系统】基于模型的协同过滤算法

    基于模型的协同过滤算法 本节介绍基于模型的协同过滤算法1在Top-N推荐中的应用. 核心思想是 通过隐含特征(latent factor)联系用户兴趣和物品 . 思路:对于某个用户,首先得到其兴趣分类 ...

最新文章

  1. linux命令行大全 笔记,分享|4 个 Linux 下的命令行笔记程序
  2. URL编码 - Java加密与安全
  3. python应用html模板,Flask框架如何使用HTML模板
  4. 【算法竞赛学习】资金流入流出预测-挑战Baseline_时间序列规则
  5. 大数据之-Hadoop3.x_了解一下hive和hbase的区别---大数据之hadoop3.x工作笔记0084
  6. CUDA + QT Creator + Win7的集成
  7. EXCEL VBA连接SQL数据库
  8. 基于单片机的水库控制系统设计
  9. 【工程源码】使用华邦的SPI FLASH作为EPCS时固化NIOS II软件报错及解决方案
  10. 快速导出股票日线数据
  11. 商业智能知识分享:BI的4大核心技术
  12. 《大道至简》,悟在天成——读后有感
  13. Linux系统centos下如何通过命令查看CPU内存存储等硬件信息?
  14. Occlusion Culling 遮挡剔除 相机系列5
  15. 《LeGO-LOAM: Lightweight and Ground-OptimizedLidar Odometry and Mapping on Variable Terrain》论文精读
  16. hibernate精华总结
  17. 实时时钟(RTC)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. Magic Number魔数是什么
  19. axios库读不到cookie_axios中cookie跨域及相关配置示例详解
  20. 白话中台战略2:中台到底长啥样?

热门文章

  1. 国际科学数据服务平台nbsp;-nbsp;csdb
  2. 淘宝网的架构演化分析
  3. RoboCode的Intellij环境搭建
  4. 由一些公司的笔试题目想到的---模拟电路,数字电路最基本应该知道哪些
  5. 怎么学习大数据,入门大数据要掌握哪些知识?
  6. Word VBA-表格操作汇总
  7. 免费正确使用计算机ppt,计算机基础课件ppt
  8. GNSS NMEA-0183协议解析
  9. cam350菜单怎么切换成中文_对CAM350英文菜单不熟悉的可以参考一下这份CAM350中文菜单...
  10. 单片机c语言1602怎么接线,lcd1602与单片机连接图 - lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图...