基于Mapreduce的推荐器原理和实现
来源:互联网 发布:万方数据库怎么查论文 编辑:程序博客网 时间:2024/06/05 03:23
原理:item相似矩阵*user对item喜好矩阵 得到 预测的user对所有item的喜好矩阵(推荐度),排列取高
Recommender程序实现(初):
CardID:卡号,对应于用户
ShopID:店铺标识
步骤1:
消费记录文件作为输入,生成用户(银行卡)数据、评分
MAP
在消费记录文件中,提取CardID、ShopID
输入:(Long,String),Long表示文件中的位置,String表示该行的消费记录
输出:(CardID,ShopID),如98955/ 590
REDUCE
先对每个用户统计ShopID,再跟据评分系统评分
输出:(CardID,Vector),Vector中存放该用户消费过的所有商铺和评分。如
98955/ [590:3.0, 22:4.0, 9059:1.0]
步骤2
步骤1的结果文件作为输入,衡量店铺的相关程度
MAP
输入:(CardID,Vector),如98955/ [590:3.0, 22:4.0, 9059:1.0]
输出:(ShopID1,【ShopID2:s12】),s12表示12的相关程度,如590/[22:12.0]
REDUCE
对每个店铺统计其他店铺的相关度
输出:(ShopID1,Vector),Vector中存放其他店铺和该店铺的相关度。如
590/[22:12.0,95:1.0,...,9059:3.0,...]
步骤3
步骤1的结果文件作为输入
MAP
输入:(CardID,Vector),如98955/ [590:3.0, 22:4.0, 9059:1.0]
输出:(ShopID,【CardID:W】),W为偏好程度,如590/[98955:3.0]
REDUCE
无操作
步骤4
步骤2、3的结果文件作为输入
MAP
无操作
REDUCE
根据ShopID,把用户喜好信息、与其他店铺相似信息收集在一起
输出:(ShopID,VectorAndPrefsWritable),VectorAndPrefsWritable中存储用户喜好信息、与其他店铺相似信息。如590/ [ [ 98955:3.0,98966:4.0,...];[22:12.0,95:1.0,...,9059:3.0,...]]
步骤5
步骤4的结果文件作为输入,得到总的推荐度,得到推荐数据
MAP
根据用户划分,用用户喜好程度和店铺相似程度相乘得到推荐度
输出:(CardID,Vector),如98955 /[22:36.0,95:3.0,...,9059:9.0,...]
COMBINER
根据CardID,把Vector累加
REDUCE
根据CardID,把Vector累加,找到推荐度高的前N个店(没有消费过的)
输出:(CardID,Vector),如98955/ [23:15.0,195:1.0,...]
Recommender程序实现(改):
主题思想:
由于数据量巨大,要通过Hadoop分布式编程实现该任务。
具体实现:
通过7步Mapreduce程序分布实现,并通过main函数控制7个mapreduce的执行。
Step0:
做itemID和index映射的准备工作。mapper逐行读入item文件,并作处理后得到itemID,再依次标号,写出到文件。
Step1:
mapper首先在setup过程中,根据step0文件构建hash表(HashMap)。在map函数中对文件内容处理后,写出<userID,index>对。
combiner累加
reducer把相同的进行累加,得到用户去过每个店铺的次数的容器,在根据次数、评分对应关系转化成每个用户评分的容器。
Step2:
mapper根据step1结果,如果两个item共同出现在,输出<item1,item2>
combiner累加
reducer累加得到最终的item1和其他item共同出现次数
step3:
mapper以step1结果为输出,以itemindex拆分,得到多个<itemindex,(user:preference)>
step4:
默认mapper,以2、3为输入
reducer把list(user)、list(preference)、itemindex和其他item共同出现次数(vector)根据itemindex整合到一起
step5:
mapper中对每个user计算preference*vector,输出<user,preference*vector>
combiner\reducer根据user把preference*vector叠加,完成两个矩阵得乘法。
Step6:
默认的mapper,step1、step5结果作为输出。
reducer中,在step构建用于index和itemID转化的HashMap。在reduce函数中,先去掉值为0的元素得到迭代器,统计个数比再次得到Vector。比较个数即可分别preferenceVector、recommendationVector。把preferenceVector去0后做循环,把1两者相同的元素在recommendationVector中的值设为0。在根据recommendationVector得到对于用户前K个推荐度最高的index,做转化后写出到输出文件(step6)
有待解决的问题:
由于mapreduce个数多、数据量大,需要做优化。
谁有想法欢迎留言、来信,谢谢。
- 基于Mapreduce的推荐器原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- 基于用户的协同过滤推荐算法原理和实现
- Hadoop应用开发--基于MapReduce推荐系统的实现
- 通过mapReduce实现基于项目的协同过滤推荐
- Hadoop 2.6 使用MapReduce实现基于物品的推荐系统
- Hadoop 2.6 使用MapReduce实现基于用户的推荐系统
- Hadoop 2.6 使用MapReduce实现基于内容的推荐系统
- 基于用户的协同过滤和基于物品的协同过滤推荐算法原理和实现
- 基于mapreduce实现好友推荐功能
- Hadoop伪分布安装详解+MapReduce运行原理+基于MapReduce的KNN算法实现
- JSP中实现分页
- nginx,linux压力测试工具webbench
- WINDOWS上如何安装COMPASS
- 使用SkinMagic美化MFC对话框
- iOS应用的本地缓存机制设计
- 基于Mapreduce的推荐器原理和实现
- 细数二十世纪最伟大的10大算法
- Excel to DataBase Excel数据导入到数据库
- Unity 网络通信(一)Unity Network 初步
- Oracle序列使用:建立、删除
- SCP Host key verification failed
- canvas标签应用 简单俄罗斯方块游戏的实现
- java中import,package的用法
- 关于设计