基于物品的协同过滤ItemCF的mapreduce实现
文章的UML图比较好看.....
原文链接:www.cnblogs.com/anny-1980/articles/3519555.html
基于物品的协同过滤ItemCF
数据集字段:
1. User_id: 用户ID
2. Item_id: 物品ID
3. preference:用户对该物品的评分
算法的思想:
1. 建立物品的同现矩阵A,即统计两两物品同时出现的次数
数据格式:Item_id1:Item_id2 次数
2. 建立用户对物品的评分矩阵B,即每一个用户对某一物品的评分
数据格式:Item_id user_id:preference
3. 推荐结果=物品的同现矩阵A * 用户对物品的评分矩阵B
数据格式:user_id item_id,推荐分值
4. 过滤用户已评分的物品项
5.对推荐结果按推荐分值从高到低排序
原始数据:
1,101,5.0 1,102,3.0 1,103,2.5 2,101,2.0 2,102,2.5 2,103,5.0 2,104,2.0 3,101,2.0 3,104,4.0 3,105,4.5 3,107,5.0 4,101,5.0 4,103,3.0 4,104,4.5 4,106,4.0 5,101,4.0 5,102,3.0 5,103,2.0 5,104,4.0 5,105,3.5 5,106,4.0 6,102,4.0 6,103,2.0 6,105,3.5 6,107,4.0 |
Hadoop MapReduce程序分为四步:
第一步: 读取原始数据,按用户ID分组,输出文件数据格式为
1 103:2.5,101:5.0,102:3.0 2 101:2.0,102:2.5,103:5.0,104:2.0 3 107:5.0,101:2.0,104:4.0,105:4.5 4 103:3.0,106:4.0,104:4.5,101:5.0 5 101:4.0,102:3.0,103:2.0,104:4.0,105:3.5,106:4.0 6 102:4.0,103:2.0,105:3.5,107:4.0 |
第二步:统计两两物品同时出现的次数,输出文件数据格式为
101:101 5 101:102 3 101:103 4 101:104 4 101:105 2 101:106 2 101:107 1 102:101 3 102:102 4 102:103 4 102:104 2 102:105 2 102:106 1 102:107 1 103:101 4 103:102 4 103:103 5 103:104 3 103:105 2 103:106 2 103:107 1 104:101 4 104:102 2 104:103 3 104:104 4 104:105 2 104:106 2 104:107 1 105:101 2 105:102 2 105:103 2 105:104 2 105:105 3 105:106 1 105:107 2 106:101 2 106:102 1 106:103 2 106:104 2 106:105 1 106:106 2 107:101 1 107:102 1 107:103 1 107:104 1 107:105 2 107:107 2 |
第三步:生成用户评分矩阵和物品同现矩阵
第一个mapper结果为用户评分矩阵,结果如下:
101 2:2.0 101 5:4.0 101 4:5.0 101 3:2.0 101 1:5.0 102 2:2.5 102 1:3.0 102 6:4.0 102 5:3.0 103 6:2.0 103 5:2.0 103 1:2.5 103 4:3.0 103 2:5.0 104 5:4.0 104 2:2.0 104 3:4.0 104 4:4.5 105 5:3.5 105 3:4.5 105 6:3.5 106 4:4.0 106 5:4.0 107 3:5.0 107 6:4.0 |
第二个mapper生成物品同现矩阵,结果如下:
101:101 5 101:102 3 101:103 4 101:104 4 101:105 2 101:106 2 101:107 1 102:101 3 102:102 4 102:103 4 102:104 2 102:105 2 102:106 1 102:107 1 103:101 4 103:102 4 103:103 5 103:104 3 103:105 2 103:106 2 103:107 1 104:101 4 104:102 2 104:103 3 104:104 4 104:105 2 104:106 2 104:107 1 105:101 2 105:102 2 105:103 2 105:104 2 105:105 3 105:106 1 105:107 2 106:101 2 106:102 1 106:103 2 106:104 2 106:105 1 106:106 2 107:101 1 107:102 1 107:103 1 107:104 1 107:105 2 107:107 2 |
第四步:做矩阵乘法,推荐结果=物品的同现矩阵A * 用户对物品的评分矩阵B
结果如下:
1 107,10.5 1 106,18.0 1 105,21.0 1 104,33.5 1 103,44.5 1 102,37.0 1 101,44.0 2 107,11.5 2 106,20.5 2 105,23.0 2 104,36.0 2 103,49.0 2 102,40.0 2 101,45.5 3 107,25.0 3 106,16.5 3 105,35.5 3 104,38.0 3 103,34.0 3 102,28.0 3 101,40.0 4 107,12.5 4 106,33.0 4 105,29.0 4 104,55.0 4 103,56.5 4 102,40.0 4 101,63.0 5 107,20.0 5 106,34.5 5 105,40.5 5 104,59.0 5 103,65.0 5 102,51.0 5 101,68.0 6 107,21.0 6 106,11.5 6 105,30.5 6 104,25.0 6 103,37.0 6 102,35.0 6 101,31.0 |
基于物品的协同过滤ItemCF的mapreduce实现的更多相关文章
- 转】Mahout分步式程序开发 基于物品的协同过滤ItemCF
原博文出自于: http://blog.fens.me/hadoop-mahout-mapreduce-itemcf/ 感谢! Posted: Oct 14, 2013 Tags: Hadoopite ...
- Mahout分步式程序开发 基于物品的协同过滤ItemCF
http://blog.fens.me/hadoop-mahout-mapreduce-itemcf/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, ...
- 基于物品的协同过滤item-CF 之电影推荐 python
推荐算法有基于协同的Collaboration Filtering:包括 user Based和item Based:基于内容 : Content Based 协同过滤包括基于物品的协同过滤和基于用户 ...
- 推荐召回--基于物品的协同过滤:ItemCF
目录 1. 前言 2. 原理&计算&改进 3. 总结 1. 前言 说完基于用户的协同过滤后,趁热打铁,我们来说说基于物品的协同过滤:"看了又看","买了又 ...
- 基于物品的协同过滤算法(ItemCF)
最近在学习使用阿里云的推荐引擎时,在使用的过程中用到很多推荐算法,所以就研究了一下,这里主要介绍一种推荐算法—基于物品的协同过滤算法.ItemCF算法不是根据物品内容的属性计算物品之间的相似度,而是通 ...
- ItemCF_基于物品的协同过滤_MapReduceJava代码实现思路
ItemCF_基于物品的协同过滤 1. 概念 2. 原理 如何给用户推荐? 给用户推荐他没有买过的物品--103 3. java代码实现思路 数据集: 第一步:构建物品的同现矩阵 第 ...
- ItemCF_基于物品的协同过滤
ItemCF_基于物品的协同过滤 1. 概念 2. 原理 如何给用户推荐? 给用户推荐他没有买过的物品--103 3. java代码实现思路 数据集: 第一步:构建物品的同现矩阵 第 ...
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3 基于物品的协同过滤推荐算法--读"Item-Based ...
- Music Recommendation System with User-based and Item-based Collaborative Filtering Technique(使用基于用户及基于物品的协同过滤技术的音乐推荐系统)【更新】
摘要: 大数据催生了互联网,电子商务,也导致了信息过载.信息过载的问题可以由推荐系统来解决.推荐系统可以提供选择新产品(电影,音乐等)的建议.这篇论文介绍了一个音乐推荐系统,它会根据用户的历史行为和口 ...
随机推荐
- TensorFlow技术解析与实战学习笔记(15)-----MNIST识别(LSTM)
一.任务:采用基本的LSTM识别MNIST图片,将其分类成10个数字. 为了使用RNN来分类图片,将每张图片的行看成一个像素序列,因为MNIST图片的大小是28*28像素,所以我们把每一个图像样本看成 ...
- Java设计模式之 — 策略(Strategy)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8986285 今天你的leader兴致冲冲地找到你,希望你可以帮他一个小忙,他现在急 ...
- QT5.5移植全攻略【转】
一.编译1.到www.qt.io下载源码,qt-everywhere-opensource-src-5.5.0 2.设置编译器或者说平台.编译器是通过xplatform参数指定的,xplatform后 ...
- 于工具类中@Autowired注入为NULL的问题记录
记录:在实体类中加入@Component注解和@Autowired注解时Service不能注入成功. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- 【ACM】poj_2210_Metric Time_201308011933
Metric TimeTime Limit: 1000MS Memory Limit: 65536K Total Submissions: 2550 Accepted: 783 Descripti ...
- 关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法
首先说明一下我的系统配置:ubuntu 12.04 gcc 4.6.3 有几天没有使用ubuntu了,今天拿出来编程序,刚開始编译一个uboot1.1.6的代码.出现了stdio.h:没有那么 ...
- AOJ 0121 Seven Puzzle {广度优先搜索}(*)
原题 题意 题意是有一个输入,比方: 1 0 2 3 4 5 6 7 摆成例如以下形状: 1 0 2 3 4 5 6 7 0表示空格.其它数字能够移动到0的位置.最后须要到例如以下形状: 0 1 2 ...
- Java设计模式菜鸟系列(十五)建造者模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39863125 建造者模式(Builder):工厂类模式提供的是创建单个类的模式.而建造者模 ...
- 《Android源代码设计模式解析与实战》读书笔记(八)
第八章.状态模式 1.定义 状态模式中的行为是由状态来决定,不同的状态下有不同的行为.当一个对象的内在状态改变时同意改变其行为,这个对象看起来像是改变了其类. 2.使用场景 1.一个对象的行为取决于它 ...
- C++中sort()及qsort() (不完整介绍)
在平时刷算法题和oj的时候,排序算法是最经常用到的算法之一:且在各类算法书的目录中 也通常是将各种排序算法放在最前面来讲,可见排序算法的重要性.可能许多人都在算法书中有学过冒泡.快速排序的方法,也都大 ...