基于物品的协同过滤(二)

MapReduce实现基于物品的协同过滤:

实现过程中需要执行多个mapreduce任务。

初始数据:

u1,i101,5.0
u1,i102,3.0
u1,i103,2.5
u2,i101,2.0
u2,i102,2.5
u2,i103,5.0
u2,i104,2.0
u3,i101,2.0
u3,i104,4.0
u3,i105,4.5
u3,i107,5.0
u4,i101,5.0
u4,i103,3.0
u4,i104,4.5
u4,i106,4.0
u5,i101,4.0
u5,i102,3.0
u5,i103,2.0
u5,i104,4.0
u5,i105,3.5
u5,i106,4.0

job1: 生成用户对物品喜爱度矩阵

数据:初始数据

map:

key=userid

value=item:grade

reduce:

key=userid

value=item:grade,item:grade

结果:

u1 i101:5.0,i102:3.0,i103:2.5
u2 i101:2.0,i102:2.5,i103:5.0,i104:2.0
u3 i107:5.0,i105:4.5,i104:4.0,i101:2.0
u4 i106:4.0,i103:3.0,i101:5.0,i104:4.5
u5 i104:4.0,i105:3.5,i106:4.0,i101:4.0,i102:3.0,i103:2.0

job2: 生成物品与物品的同现矩阵

数据:job1的结果数据

map:

例,将i101 ,i102 ,i103 循环组合

key=item:item

value=1

reduce:

key=item:item

value=n

结果:

i101:i104 4
i101:i105 2
i101:i106 2
i101:i107 1
i102:i101 3
i102:i102 3
i102:i103 3
i102:i104 2
i102:i105 1
i102:i106 1
i103:i101 4
i103:i102 3
i103:i103 4
i103:i104 3
i103:i105 1
i103:i106 2
i104:i101 4
i104:i102 2
i104:i103 3
i104:i104 4
i104:i105 2
i104:i106 2
i104:i107 1
i105:i101 2
i105:i102 1
i105:i103 1
i105:i104 2
i105:i105 2
i105:i106 1
i105:i107 1
i106:i101 2
i106:i102 1
i106:i103 2
i106:i104 2
i106:i105 1
i106:i106 2
i107:i101 1
i107:i104 1
i107:i105 1
i107:i107 1

job3:将同现矩阵和用户喜爱度矩阵进行相乘

数据:job1和job2的输出数据

map:

区分不同的数据进行处理,根据文件目录进行区分

FileSplit split = (FileSplit)context.getInputSplit();
dirName = split.getPath().getParent().getName();

job1的数据经过map处理:

i101 B:u1,5.0
i102 B:u1,3.0
i103 B:u1,2.5

job2的数据经过map处理:

i101 A:i101,5

key=item

value=B:u1,5.0或A:i101,5

reduce:

针对同一个item的数据,A的数据,分别和B的数据进行相乘

key=user

value=item,score

u2      i105,4.0

结果:

u2 i105,4.0
u1 i105,14.0
u4 i105,24.0
u3 i105,28.0
u5 i105,36.0
u2 i104,44.0
u1 i104,64.0
u4 i104,84.0
u3 i104,92.0
u5 i104,108.0
u2 i107,110.0
u1 i107,115.0
u4 i107,120.0
u3 i107,122.0
u5 i107,126.0
u2 i106,130.0
u1 i106,140.0
u4 i106,150.0
u3 i106,154.0
u5 i106,162.0
u2 i101,172.0
u1 i101,197.0
u4 i101,222.0
u3 i101,232.0
u5 i101,252.0
u2 i103,260.0
u1 i103,280.0
u4 i103,300.0
u3 i103,308.0
u5 i103,324.0
u2 i102,330.0
u1 i102,345.0
u4 i102,360.0
u3 i102,366.0
u5 i102,378.0
u2 i105,2.5
u1 i105,5.5
u5 i105,8.5
u2 i104,13.5
u1 i104,19.5
u5 i104,25.5
u2 i106,28.0
u1 i106,31.0
u5 i106,34.0
u2 i101,41.5
u1 i101,50.5
u5 i101,59.5
u2 i103,67.0
u1 i103,76.0
u5 i103,85.0
u2 i102,92.5
u1 i102,101.5
u5 i102,110.5
u2 i105,5.0
u1 i105,7.5
u4 i105,10.5
u5 i105,12.5
u2 i104,27.5
u1 i104,35.0
u4 i104,44.0
u5 i104,50.0
u2 i106,60.0
u1 i106,65.0
u4 i106,71.0
u5 i106,75.0
u2 i101,95.0
u1 i101,105.0
u4 i101,117.0
u5 i101,125.0
u2 i103,145.0
u1 i103,155.0
u4 i103,167.0
u5 i103,175.0
u2 i102,190.0
u1 i102,197.5
u4 i102,206.5
u5 i102,212.5
u2 i105,4.0
u4 i105,13.0
u3 i105,21.0
u5 i105,29.0
u2 i104,37.0
u4 i104,55.0
u3 i104,71.0
u5 i104,87.0
u2 i107,89.0
u4 i107,93.5
u3 i107,97.5
u5 i107,101.5
u2 i106,105.5
u4 i106,114.5
u3 i106,122.5
u5 i106,130.5
u2 i101,138.5
u4 i101,156.5
u3 i101,172.5
u5 i101,188.5
u2 i103,194.5
u4 i103,208.0
u3 i103,220.0
u5 i103,232.0
u2 i102,236.0
u4 i102,245.0
u3 i102,253.0
u5 i102,261.0
u3 i105,9.0
u5 i105,16.0
u3 i104,25.0
u5 i104,32.0
u3 i107,36.5
u5 i107,40.0
u3 i106,44.5
u5 i106,48.0
u3 i101,57.0
u5 i101,64.0
u3 i103,68.5
u5 i103,72.0
u3 i102,76.5
u5 i102,80.0
u4 i105,4.0
u5 i105,8.0
u4 i104,16.0
u5 i104,24.0
u4 i106,32.0
u5 i106,40.0
u4 i101,48.0
u5 i101,56.0
u4 i103,64.0
u5 i103,72.0
u4 i102,76.0
u5 i102,80.0
u3 i105,5.0
u3 i104,10.0
u3 i107,15.0
u3 i101,20.0

Job4: 矩阵乘法求和

map:

不做特殊处理

key:user

value:item,score

reduce:

将相同的user及item的score的值进行相加。

key:user

value:item,score

结果:

u1 i105:15.5
u1 i104:33.5
u1 i107:5.0
u1 i106:18.0
u1 i101:44.0
u1 i103:39.0
u1 i102:31.5
u2 i105:15.5
u2 i104:36.0
u2 i107:4.0
u2 i106:20.5
u2 i101:45.5
u2 i103:41.5
u2 i102:32.5
u3 i105:26.0
u3 i104:38.0
u3 i107:15.5
u3 i106:16.5
u3 i101:40.0
u3 i103:24.5
u3 i102:18.5
u4 i105:26.0
u4 i104:55.0
u4 i107:9.5
u4 i106:33.0
u4 i101:63.0
u4 i103:53.5
u4 i102:37.0
u5 i105:32.0
u5 i104:59.0
u5 i107:11.5
u5 i106:34.5
u5 i101:68.0
u5 i103:56.5
u5 i102:42.5

此结果为用户对各个物品的喜爱度。

时间: 2024-10-27 13:00:37

基于物品的协同过滤(二)的相关文章

ItemCF_基于物品的协同过滤_MapReduceJava代码实现思路

2017年2月19日, 星期日 ItemCF_基于物品的协同过滤 1.    概念 2.    原理 如何给用户推荐? 给用户推荐他没有买过的物品--103 3.    java代码实现思路 数据集: 第一步:构建物品的同现矩阵 第二步:构建用户的得分矩阵 第三步:同现矩阵*评分矩阵 第四步:拿到最终结果,排序,得到给用户的推荐列表 问题一:物品同现矩阵和用户得分矩阵如何构建? 问题二:矩阵相乘如何来做?   六个MapReduce step1_第一个MapReduce: 目的-->去重去除数据

基于物品的协同过滤算法ItemCF算法实现

基于物品的协同过滤算法(ItemCF)的基本思想是:给用户推荐那些和他们之前喜欢的物品相似的物品. 比如,该算法会因为你购买过<Java从入门到精通>而给你推荐<Java并发编程实战>.不过,基于物品的协同过滤算法并不利用物品的内容属性计算物品之间的相似度,二是通过分析用户的行为数据计算物品之间的相似度.该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B. 实现代码: # -*- coding=utf-8 -*- from operator impor

推荐算法之基于物品的协同过滤算法

基于物品的协同过滤算法(ItemCF)是业界应用最多的算法,主要思想是利用用户之前有过的行为,给用户推荐和之前物品类似的物品. 基于物品的协同过滤算法主要分为两步: 1)计算物品之间的相似度. 2)依据物品的相似度和用户的历史行为给用户生成推荐列表. 第一步的关键点在于计算物品之间的相似度,这里并不採用基于内容的相似性,而是去计算在喜欢物品i的用户中有多少是喜欢物品j的,这样计算的前提是用户的兴趣爱好通常是比較确定的,不easy变,那么当一个用户对两个物品都喜欢的时候,我们往往能够觉得这两个物品

基于用户和基于物品的协同过滤算法的比较

首先回顾一下,协同过滤算法主要有两种,一种是基于用户的协同过滤算法(UserCF),另一种是基于物品的协同过滤算法(ItemCF). 基于用户的协同过滤算法主要有两步: 1)找到和目标用户兴趣相似的用户集合 2)找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户. 基于物品的协同过滤算法主要有两步: 1)计算物品之间的相似度. 2)根据物品的相似度和用户的历史行为给用户生成推荐列表. 由此可以看出UserCF是推荐用户所在兴趣小组中的热点,更注重社会化,而ItemCF则是根据用

百万用户,八十万商品,如何计算基于物品的协同过滤

问题描述: 数据包含了一百四十万用户对80万商品的打分.要利用基于物品的协同过滤来计算.如果直接两两计算140万维的向量相似度,肯定不行啊. 问题分析: 每个物品的向量虽然是140万维的,但是其实给一个物品打分的用户其实不多,这个矩阵是非常稀疏的.而且根据长尾问题来说,大部分物品只有很少的用户有过评分. 总结来说就是每个物品评分的用户远远小于140万,每个用户评价过的商品远远小于80万.所以我们的问题就转换为如何处理这个稀疏的矩阵. 解决方法: 在计算相似度时,选用了夹角余弦(因为相比于杰卡德,

推荐算法之基于物品的协同过滤

基于物品的协同过滤( item-based collaborative filtering )算法是此前业界应用较多的算法.无论是亚马逊网,还是Netflix .Hulu . YouTube ,其推荐算法的基础都是该算法.为行文方便,下文以英文简称ItemCF表示.本文将从其基础算法讲起,一步步进行改进并基于MovieLens 数据集给出代码实现,带你领略这一经典算法的美. 1.基本原理 前面我们简单讲解了一下基于用户的协同过滤推荐(UserCF),并且给出了实现代码.还不了解的朋友可以转到链接

推荐算法简介:基于用户的协同过滤、基于物品的协同过滤、基于内容的推荐

参考来源: https://blog.csdn.net/u011748319/article/details/90269818 1.推荐算法 1.1.协同过滤 协同过滤是目前应用最广泛的推荐算法,它仅仅通过了解用户与物品之间的关系进行推荐,而根本不会考虑到物品本身的属性. 可分成两类: 1.基于用户(user-based)的协同过滤 2.基于商品(item-based)的协同过滤 1.1.1.基于用户的协同过滤 基本思想: 基于用户对物品的偏好找到邻居用户(相似用户),然后将邻居用户(相似用户)

Mahout分步式程序开发 基于物品的协同过滤ItemCF

阅读导读: 1.简述用Mahout实现协同过滤ItemCF的步骤? 2.如何用API实现Hadoop的各种HDFS命令? 3.Kmeans.java类报错,暂时可以怎么处理? 1. Mahout开发环境介绍 在用Maven构建Mahout项目文章中,我们已经配置好了基于Maven的Mahout的开发环境,我们将继续完成Mahout的分步式的程序开发. 本文的mahout版本为0.8. 开发环境: Win7 64bit Java 1.6.0_45 Maven 3 Eclipse Juno Serv

【推荐系统实战】:C++实现基于用户的协同过滤(UserCollaborativeFilter)

好早的时候就打算写这篇文章,但是还是参加阿里大数据竞赛的第一季三月份的时候实验就完成了,硬生生是拖到了十一假期,自己也是醉了...找工作不是很顺利,希望写点东西回顾一下知识,然后再攒点人品吧,只能如此了. 一.问题背景 二.基于用户的协同过滤算法介绍 三.数据结构和实验过程设计 四.代码 一.问题背景 首先介绍一下问题的背景,现在我有四个月的用户.品牌数据<user,brand>,即用户在这四个月中的某一天购买了某个品牌(当然为了简化算法模型,将购买时间省去,后面再说).即现在有这四个月的数据