Spark 基于物品的协同过滤算法实现
J由于 Spark MLlib 中协同过滤算法只提供了基于模型的协同过滤算法,在网上也没有找到有很好的实现,所以尝试自己实现基于物品的协同过滤算法(使用余弦相似度距离)
算法介绍
基于物品的协同过滤算法是目前业界应用最多的算法,亚马逊网、Netflix、Hulu、YouTube 都使用该算法作为推荐系统的基础算法。算法核心思想是根据用户对物品的历史行为记录,先计算物品之间的相似度,得到与物品最相似的 TopN 个物品,再利用用户对物品的历史行为,将用户访问过的物品的相似物品推荐给用户。也就是说,算法分为 2 步:
计算物品之间的相似度
为用户生成推荐列表
计算物品之间的相似度
计算物品的相似度有很多种算法,如余弦相似度、皮尔森相关度、欧式距离相似度、Tanimoto系数等,这里我们使用的是余弦相似度。
假设有向量A(x1,x2,...xn)和向量B(y1,y2,...yn),A、B 之间的余弦相似度为:
余弦相似度公式
如果物品少这样计算没关系,但设想如有 100W 的物品,需要计算物品间的两两相似度,计算量大概是 100W x 100W,基本无法计算。
虽然物品很多,但并不是每两个物品都有被相同的用户访问过, 也就是说,很多物品直接余弦相似度等于0,为了避免这些计算,我们引入倒排表来解决这一问题。
假设有物品 Item1、Item2、Item3、Item4,用户 U1、U2、U3、U4:
Item1 被 U1、U2 访问,偏好分分别是2、3,转化为向量是(2,3,0,0)
Item2 被 U3、U4 访问,偏好分分别是1、4,转化为向量是(0,0,1,4)
Item3 被 U2,U3 访问,偏好分分别是2、2,转化为向量是(0,2,2,0)
Item4 只被 U3 访问,用户对其的偏好分是5,转化为向量是(0,0,5,0)
先计算每个 Item 的模,即上图余弦相似度公式中的分母部分,缓存
| Item1 | = √(22 + 32) = √13
| Item2 | = √17
| Item3 | = √8
| Item4 | = 5
转化为用户访问物品关系,将相同用户访问过的 Item 列出,即:
U1:Item1(2)
U2:Item1(3),Item3(2)
U3:Item2(1),Item3(2),Item4(5)
U4:Item2(5)
针对同一用户,计算两两物品之间的相似度,输出物品对,分数,即:
U1:输出空
U2:输出 (Item1, Item3), 3x2=6
U3:输出 (Item2, Item3), 2,(Item2, Item4), 5,(Item3, Item4), 10
U4:输出空
注意:可以将所有物品对 id 小的放前面,以减少后面一半的计算量
将物品对作为 key 聚合,将分数相加,得到每个物品对的分数和,即上图余弦相似度公式中的分子部分。再从缓存中取出分母部分相除,即两两物品的相似度。如 Item2 和 Item4 的余弦相似度=5/(√17 x 5) = 1/√17
如果要取物品的 TopK 相似的物品,可将得到的两两相似度结果(其实是半个相似度矩阵)扩展,然后按 key 聚合取 TopK 个。另外,实践表明针对同一物品,如果将相似度进行归一化 similaryi/similarymax 有助于提高最终推荐结果的精度。
为用户生成推荐列表
现在已经有每个物品的 TopK 个相似的物品信息,结合用户对物品的访问情况,将用户访问过的每个物品的相似物品取出,按相似度加权,排除已经访问过的物品,就可以得到用户的推荐列表,具体计算步骤如下:
将物品,相似物品列表 与 物品,访问过该物品的用户列表 join,得到物品,(相似物品列表,访问过该物品的用户列表)
交叉遍历相似物品列表和访问过该物品的用户列表,得到很多 用户,(物品,分数)
按用户聚合,将相同物品的分数相加,按分数排序,取 TopK,即该用户的推荐列表
Spark 基于物品的协同过滤算法实现的更多相关文章
- 基于物品的协同过滤算法(ItemCF)
最近在学习使用阿里云的推荐引擎时,在使用的过程中用到很多推荐算法,所以就研究了一下,这里主要介绍一种推荐算法—基于物品的协同过滤算法.ItemCF算法不是根据物品内容的属性计算物品之间的相似度,而是通 ...
- 案例:Spark基于用户的协同过滤算法
https://mp.weixin.qq.com/s?__biz=MzA3MDY0NTMxOQ==&mid=2247484291&idx=1&sn=4599b4e31c2190 ...
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3 基于物品的协同过滤推荐算法--读"Item-Based ...
- Spark机器学习(11):协同过滤算法
协同过滤(Collaborative Filtering,CF)算法是一种常用的推荐算法,它的思想就是找出相似的用户或产品,向用户推荐相似的物品,或者把物品推荐给相似的用户.怎样评价用户对商品的偏好? ...
- 推荐召回--基于物品的协同过滤:ItemCF
目录 1. 前言 2. 原理&计算&改进 3. 总结 1. 前言 说完基于用户的协同过滤后,趁热打铁,我们来说说基于物品的协同过滤:"看了又看","买了又 ...
- 转】Mahout分步式程序开发 基于物品的协同过滤ItemCF
原博文出自于: http://blog.fens.me/hadoop-mahout-mapreduce-itemcf/ 感谢! Posted: Oct 14, 2013 Tags: Hadoopite ...
- 基于物品的协同过滤item-CF 之电影推荐 python
推荐算法有基于协同的Collaboration Filtering:包括 user Based和item Based:基于内容 : Content Based 协同过滤包括基于物品的协同过滤和基于用户 ...
- Music Recommendation System with User-based and Item-based Collaborative Filtering Technique(使用基于用户及基于物品的协同过滤技术的音乐推荐系统)【更新】
摘要: 大数据催生了互联网,电子商务,也导致了信息过载.信息过载的问题可以由推荐系统来解决.推荐系统可以提供选择新产品(电影,音乐等)的建议.这篇论文介绍了一个音乐推荐系统,它会根据用户的历史行为和口 ...
- Mahout分步式程序开发 基于物品的协同过滤ItemCF
http://blog.fens.me/hadoop-mahout-mapreduce-itemcf/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, ...
随机推荐
- php用类生成二维码
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq1355541448/article/details/28630289 百度云盘里面已经有了.引用 ...
- NoSQL 数据库概览及其与 SQL 语法的比较
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题. 本文对NoSQL数据库的定义.分类.特征.当前比较流行的NoSQL数据库系统等进行了简单的介绍,并对N ...
- windows server 2008 r2 IIS 6 元数据库与IIS 6 配置的兼容性 解决方案
1 菜单-管理工具-服务器管理 2 添加角色服务 3 选中 IIS6 管理兼容性 4 安装完成 5 在IIS上新建一个相应端口的网站 6重新加载项目,OK
- 页面中的CSS性能优化
大型网站中会有多个CSS文件,性能优化是不要的.主要有以下几个方法: 一:压缩样式表: 通过构建工具压缩CSS文件,能够减少文件的大小,从而得到更快的下载.解析和执行.对于使用预处理器例如 Sass, ...
- C++匿名名字空间
转自:http://blog.csdn.net/eric_arrow/article/details/8978905 名字空间(namespace),是C++提供的一个解决符合名字冲突的特性.标准规定 ...
- Linux系统——NFS网络文件系统
在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享里,然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资 ...
- HDU - 2732 Leapin' Lizards (拆点最大流)
题意:有N*M的矩形,每个格点有一个柱子,每根柱子有高度c,允许蜥蜴经过这根柱子c次,开始有一些蜥蜴在某些柱子上,它们要跳出这个矩形,每步最大能跳d个单位,求最少有多少蜥蜴不能跳出这个矩形. 分析:转 ...
- Python之路——线程池
1 线程基础 1.1 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2 线程同步——锁 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样,其实Python中是伪多线程).但是当线程 ...
- 滑块控件CCControlSlider
#include "cocos-ext.h" //包含头文件 using namespace cocos2d::extension;//引用命名空间 /** * 创建CCContr ...
- 多媒体文件格式分析 MP3文件结构及编解码流程
多媒体文件格式分析 http://blog.csdn.net/taniya001/article/details/7962864 多媒体文件格式分析 MP3文件结构及编解码流程 http://www. ...