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数据集:
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.用户账户管理 2.学生个人信息的查看与修改 3.学生的网上选课与课程的评分 4.教师个人信息的查看与修改 5.教师对学生课程评价结果的查看 ...
- 基于协同过滤算法的推荐
2019独角兽企业重金招聘Python工程师标准>>> 基于协同过滤算法的推荐 (本实验选用数据为真实电商脱敏数据,仅用于学习,请勿商用) 数据挖掘的一个经典案例就是尿布与啤酒的例子 ...
- 协同过滤算法 R/mapreduce/spark mllib多语言实现
用户电影评分数据集下载 http://grouplens.org/datasets/movielens/ 1) Item-Based,非个性化的,每个人看到的都一样 2) User-Based,个性化 ...
- 推荐系统之基于邻域的算法-------协同过滤算法
基于邻域的协同过滤主要分为两类,基于用户的协同过滤和基于物品的协同过滤.前者给用户推荐和他兴趣相似的其他用户喜欢的物品,后者则是推荐和他之前喜欢过的物品相似的物品. 基于用户的协同过滤算法 这里介绍基 ...
- 推荐系统--基于用户的协同过滤算法
1. 概述 和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息. 和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户 ...
- 基于Spark MLlib平台的协同过滤算法---电影推荐系统
协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析 一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,协同过滤算法按照数据使用 ...
- 探秘推荐引擎之协同过滤算法小综述
数学大神.统计学大神和数据挖掘推荐大神请关注. 一.数学期望的理解 早些时候,法国有两个大数学家,一个叫做布莱士·帕斯卡,一个叫做费马.帕斯卡认识两个赌徒,这两个赌徒向他提出了一个问题.他们说,他俩下 ...
- [推荐算法]ItemCF,基于物品的协同过滤算法
[推荐算法]ItemCF,基于物品的协同过滤算法 标签: ItemCF基于用户的协同过滤算法 2015-03-09 15:11 4144人阅读 评论(1) 收藏 举报 本文章已收录于: 分类: ...
- Apache Mahout基于商品的协同过滤算法流程分析
最近使用mahout的itemBase协同过滤算法,研究了下他的源码,记录如下,以备后忘-- 其算法实现大致分四个主要的部分: 1.将输入数据转化成矩阵 2.计算相似性 3.还是转化数据格式,为计算预 ...
- 【推荐系统】基于模型的协同过滤算法
基于模型的协同过滤算法 本节介绍基于模型的协同过滤算法1在Top-N推荐中的应用. 核心思想是 通过隐含特征(latent factor)联系用户兴趣和物品 . 思路:对于某个用户,首先得到其兴趣分类 ...
最新文章
- linux命令行大全 笔记,分享|4 个 Linux 下的命令行笔记程序
- URL编码 - Java加密与安全
- python应用html模板,Flask框架如何使用HTML模板
- 【算法竞赛学习】资金流入流出预测-挑战Baseline_时间序列规则
- 大数据之-Hadoop3.x_了解一下hive和hbase的区别---大数据之hadoop3.x工作笔记0084
- CUDA + QT Creator + Win7的集成
- EXCEL VBA连接SQL数据库
- 基于单片机的水库控制系统设计
- 【工程源码】使用华邦的SPI FLASH作为EPCS时固化NIOS II软件报错及解决方案
- 快速导出股票日线数据
- 商业智能知识分享:BI的4大核心技术
- 《大道至简》,悟在天成——读后有感
- Linux系统centos下如何通过命令查看CPU内存存储等硬件信息?
- Occlusion Culling 遮挡剔除 相机系列5
- 《LeGO-LOAM: Lightweight and Ground-OptimizedLidar Odometry and Mapping on Variable Terrain》论文精读
- hibernate精华总结
- 实时时钟(RTC)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- Magic Number魔数是什么
- axios库读不到cookie_axios中cookie跨域及相关配置示例详解
- 白话中台战略2:中台到底长啥样?
热门文章
- 国际科学数据服务平台nbsp;-nbsp;csdb
- 淘宝网的架构演化分析
- RoboCode的Intellij环境搭建
- 由一些公司的笔试题目想到的---模拟电路,数字电路最基本应该知道哪些
- 怎么学习大数据,入门大数据要掌握哪些知识?
- Word VBA-表格操作汇总
- 免费正确使用计算机ppt,计算机基础课件ppt
- GNSS NMEA-0183协议解析
- cam350菜单怎么切换成中文_对CAM350英文菜单不熟悉的可以参考一下这份CAM350中文菜单...
- 单片机c语言1602怎么接线,lcd1602与单片机连接图 - lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图...