经典推荐算法-协同过滤
协同过滤算法
- 1.传统推荐模型的演化关系图
- 2. 协同过滤
- 2.1 什么是协同过滤
- 2.2 计算用户相似度
- 2.3 最终结果排序
- 2.4 存在缺点
- 2.5 ItemCF
- 2.6 各自的应用场景
1.传统推荐模型的演化关系图
传统推荐模型发展脉络由以下几部分组成:
- 协同过滤算法族
- 逻辑回归模型族
- 因子分解机模型族
- 组合模型
2. 协同过滤
2.1 什么是协同过滤
协同过滤算法,是一种完全依赖用户和物品之间行为关系的推荐算法。从它的名字“协同过滤”中,也可以窥探到它背后的原理,就是 “协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。
电商网站的商品库里一共有 4 件商品:一个游戏机、一本小说、一本杂志,以及一台电视机。假设,现在有一名用户 X 访问了这个电商网站,电商网站的推荐系统需要决定是否推荐电视机给用户 X。
为了进行这项预测,推荐系统可以利用的数据有用户 X 对其他商品的历史评价数据,以及其他用户对这些商品的历史评价数据。
将有向图转换成矩阵的形式。这个矩阵表示了物品共同出现的情况,因此被称为“共现矩阵”。其中,用户作为矩阵行坐标,物品作为列坐标,我们再把“点赞”和“踩”的用户行为数据转换为矩阵中相应的元素值。
生成共现矩阵之后,推荐问题就转换成了预测矩阵中问号元素(图 1(d) 所示)的值的问题。由于在“协同”过滤算法中,推荐的原理是让用户考虑与自己兴趣相似用户的意见。因此,我们预测的第一步就是找到与用户 X 兴趣最相似的 n(Top n 用户,这里的 n 是一个超参数)个用户,然后综合相似用户对“电视机”的评价,得出用户 X 对“电视机”评价的预测。
2.2 计算用户相似度
在共现矩阵中,每个用户对应的行向量就可以当作一个用户的 Embedding 向量。
常见相似度计算方法:
欧氏距离
d(x,y)=(xi−yi)2d(x,y)=\sqrt{(x_i-y_i)^2} d(x,y)=(xi−yi)2
sim(x,y)=11+d(x,y)sim(x,y)= {1 \over {1+d(x,y)}} sim(x,y)=1+d(x,y)1余弦相似度
sim(i,j)=cos(i,j)=i⋅j∣∣i∣∣⋅∣∣j∣∣sim(i,j)=cos(i,j)={i \cdot j\over ||i|| \cdot ||j|| } sim(i,j)=cos(i,j)=∣∣i∣∣⋅∣∣j∣∣i⋅j皮尔逊相似系数
皮尔逊相关系数通过使用用户平均分对各独立评分进行修正,减小了用户评分偏置的影响。
sim(i,j)=∑p∈P(Ri,p−R‾i)(Rj,p−R‾j)∑p∈P(Ri,p−R‾i)2∑p∈P(Rj,p−R‾j)2sim(i,j)={\sum_{p \in P}(R_{i,p}-\overline R_i)(R_{j,p}-\overline R_j) \over \sqrt {\sum_{p \in P}(R_{i,p}-\overline R_i)^2}\sqrt {\sum_{p \in P}(R_{j,p}-\overline R_j)^2}} sim(i,j)=∑p∈P(Ri,p−Ri)2∑p∈P(Rj,p−Rj)2∑p∈P(Ri,p−Ri)(Rj,p−Rj) 改进皮尔逊相关系数
引入物品平均分的方式,减少物品评分偏置对结果的影响。
sim(i,j)=∑p∈P(Ri,p−R‾p)(Rj,p−R‾p)∑p∈P(Ri,p−R‾p)2∑p∈P(Rj,p−R‾p)2sim(i,j)={\sum_{p \in P}(R_{i,p}-\overline R_p)(R_{j,p}-\overline R_p) \over \sqrt {\sum_{p \in P}(R_{i,p}-\overline R_p)^2}\sqrt {\sum_{p \in P}(R_{j,p}-\overline R_p)^2}} sim(i,j)=∑p∈P(Ri,p−Rp)2∑p∈P(Rj,p−Rp)2∑p∈P(Ri,p−Rp)(Rj,p−Rp) Jaccard相似度
J(A,B)=∣A∩B∣∣A∪B∣=∣A∩B∣∣A∣+∣B∣−∣A∩B∣J(A,B)= {|A \cap B| \over |A \cup B|}= {|A \cap B| \over |A| + |B|-|A \cap B|} J(A,B)=∣A∪B∣∣A∩B∣=∣A∣+∣B∣−∣A∩B∣∣A∩B∣
适用于布尔值向量。
2.3 最终结果排序
在获得 Top n 个相似用户之后,利用 Top n 用户生成最终的用户 u 对物品 p 的评分。假设“目标用户与其相似用户的喜好是相似的”,根据这个假设,可以利用相似用户的已有评价对目标用户的偏好进行预测。最常用的方式是,利用用户相似度和相似用户评价的加权平均值,来获得目标用户的评价预测,公式如下所示。
Ru,p=∑s∈S(wu,s⋅Rs,p)∑s∈Swu,sR_{u,p} = {\sum_{s\in S}(w_{u,s} \cdot R_{s,p}) \over \sum_{s\in S}w_{u,s}} Ru,p=∑s∈Swu,s∑s∈S(wu,s⋅Rs,p)
2.4 存在缺点
- 互联网场景下,用户数往往大于物品数,UserCF需要维护用户相似度矩阵以便快速找到Top n相似用户。使得空间复杂度迅速增长,使得在线存储系统难以承受扩展速度。
- 用户历史数据往往很稀疏,找到相似用户的准确度非常低。
2.5 ItemCF
基于物品相似度进行推荐的协同过滤算法。通过计算共现矩阵中物品列向量的相似度得到物品之间的相似矩阵,再找到用户的历史正反馈物品的相似物品进行进一步排序和推荐。
具体推荐步骤:
- 基于历史数据构建m*n的共现矩阵
- 计算共现矩阵两两列向量间的相似度,构建n*n的物品相似度矩阵。
- 获得用户历史行为数据中的正反馈物品列表
- 利用物品相似度矩阵,针对目标用户历史行为中的正反馈物品,找到相似的Top K个物品,组成相似物品集合。
- 对相似物品集合中的物品,利用相似度分值进行排序,生成最终的推荐列表。
2.6 各自的应用场景
- UserCF适用于发现热点,以及跟踪热点的趋势
- ItemCF更适用于兴趣变化较为稳定的应用。
经典推荐算法-协同过滤相关推荐
- 基于神经网络的推荐算法,协同过滤推荐算法python
大数据运维的主要工作内容是什么? . 大数据相关工作岗位很多,有大数据分析师.大数据挖掘算法工程师.大数据研发工程师.数据产品经理.大数据可视化工程师.大数据爬虫工程师.大数据运营专员.大数据架构师. ...
- 推荐系统 --- 推荐算法 --- 基于用户行为的推荐算法 - 协同过滤算法
概述 历史 1992年,Goldberg.Nicols.Oki及Terry提出 基本思想 爱好相似的用户喜欢的东西可能也会喜欢 优点 共享朋友的经验,提高推荐的准确度 根据爱好相似的用户喜欢的视频进行 ...
- 个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 基于用户/项目的协同过滤推荐算法 混合协同过滤推荐算法 协同过滤混合推荐算法
个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 一.项目开发技术及功能介绍 1.SSH开发框架(spring+struts+hibernate) 2.js.jquery.bootstrap ...
- 个性化推荐算法-协同过滤
协同过滤Collaborative filtering ItemCF 基础公式 Sij:物品i & 物品j 的相似度. 分子:浏览过物品i 与 浏览过物品j的用户的交集. 分母:浏览过物品i ...
- 探索推荐引擎内部的秘密:深入推荐引擎相关算法 - 协同过滤
上一篇转载的博客<探索推荐引擎内部的秘密 - 推荐引擎初探>,详细讲述了推荐引擎的原理.算法.应用,并且给出了一些优化的trick,真心不错. 这里把第二篇<探索推荐引擎内部的秘密 ...
- 计算机系统应用的书,基于个性化图书推荐的协同过滤算法
摘 要本文对基于个性化图书推荐的协同过滤算法的设计方案进行实验,目的是为证实在真实用户的多标准评估过程中怎样产生数据集,从而找到一种科学的算法.并通过图书推荐的应用案例来说明算法,以验证其是否有效. ...
- Python+Django+Mysql开发在线美食推荐网 协同过滤推荐算法在美食网站中的运用 基于用户、物品的协同过滤推荐算法 个性化推荐算法、机器学习、分布式大数据、人工智能开发
Python+Django+Mysql开发在线美食推荐网 协同过滤推荐算法在美食网站中的运用 基于用户.物品的协同过滤推荐算法 个性化推荐算法.机器学习.分布式大数据.人工智能开发 FoodRecom ...
- 92 推荐算法——相似性推荐和协同过滤
1 基于相似性的推荐流程 用户偏好如何收集 用户偏好如何整合 大多数情况我们提取的用户行为都多于一种,如何组合这些不同的用户行为,基本上有以下两种方式: 不同的行为分组 一般可以分为"查看& ...
- Python+Django+Mysql开发在线购物推荐网 协同过滤推荐算法在购物网站中的运用 个性化推荐算法开发 基于用户、物品的协同过滤推荐算法 机器学习、分布式大数据、人工智能开发
Python+Django+Mysql开发在线购物推荐网 协同过滤推荐算法在购物网站中的运用 个性化推荐算法开发 基于用户.物品的协同过滤推荐算法 机器学习.分布式大数据.人工智能开发 ShopRec ...
最新文章
- 如何用VC++新建一个项目
- @getmapping注解的作用_一口气说出6种,@Transactional注解的失效场景
- linux cacti 搭建,Cacti搭建部署
- C#设计模式之单例模式
- hmcl手机版_hmcl启动器
- Facebook承认6亿用户密码可被员工随意读取:已修复故障
- python udp编程_Python UDP编程小示例
- axios的二次封装与async,await的配合使用?
- android点击监听,android基础之点击监听器的2种监听实现
- c++定义结构体队列
- html页面的bug记录:简单记录几个编辑html页面遇到的问题
- CentOS7 五步安装搜狗拼音输入法
- 【信息泄露】12306恐中招!400万数据遭泄露,请尽快更改密码!
- 运营100天的微信公众号能挣多少钱?
- 常见SOC启动流程分析
- Centos 7 虚拟机安装 jenkins
- JPA之SQL修改语句
- cx_Oracle.DatabaseError: ORA-01036: 非法的变量名/编号
- Ubuntu18.04如何安装汉语(拼音)输入法
- WinX DVD Ripper for Mac(DVD视频格式转换工具)