协同过滤 Collaborative Filtering
协同过滤 collaborative filtering
人以类聚,物以群分
相似度
1. Jaccard 相似度
定义为两个集合的交并比:
Jaccard 距离,定义为 1 - J(A, B),衡量两个集合的区分度:
为什么 Jaccard 不适合协同过滤?—— 只考虑用户有没有看过,没考虑评分大小
2. 余弦相似度
根据两个向量夹角的余弦值来衡量相似度:
为什么余弦相似度不适合协同过滤?—— 不同用户各自评分总和不一样,导致评分占总比不一样,可能计算出和事实相反的结果。
3. Pearson 相似度
解决余弦相似度中的相似度差异问题,又称中心余弦算法。先中心化,再算余弦相似度,这样正值表示正相关,负值表示负相关。
基于用户的协同过滤
通过用户对物品的喜爱程度进行度量和打分。根据不同用户对相同商品或内容的态度进行商品推荐。
举例说明,每个行向量表示某个用户对所有电影的评分
先把数据中心化
然后计算用户 A 和其他用户的 Pearson 相关系数:
可以发现用户 A 和用户 B 喜好接近,因此可以将 B 喜欢但 A 没看过的密室推荐给 A,同时也可以将 A 喜欢但 B 没看过的火焰杯推荐给 B。
用户法存在的问题:
1. 数据稀疏性。物品太多,不同用户之间买的物品重叠性较低,导致无法找到一个偏好相似的用户
2. 算法扩展性。最近邻算法的计算量随着用户和物品数量的增加而增加,不适合数据量大的情况使用。
基于物品的协同过滤
通过计算不同用户对于不同物品的评分,获得物品间的关系。基于物品间的关系对用户进行相似物品的推荐。
举例说明,每一个行向量表示某个物品被各个用户的评分,先中心化
如何预测用户 E 对 哈利波特的喜好程度?计算哈利波特和其他电影之间的 Pearson 相关系数
选择相关性较大的其他电影,拿出用户 E 对这些电影的评分,利用 Pearson 相关系数做 weighted sum:
从原理上看,基于用户或基于物品都是可以的,但实践中以物品为基础效果更好,且需要很少的数据就可以进行预测,用户法需要大量数据。
基于模型的协同过滤
主流方法主要有以下几种。先占坑,慢慢补吧
1. 关联算法
Apriori,FP Tree 和 PrefixSpan
刘建平老师的博客:
2. 聚类
K-means,谱聚类, BIRCH 和 DBSCAN
之后自己总结一下 k-means 和谱聚类
3. 矩阵分解
Matrix Factorization
要处理的数据样式
要先做 encoding,把 categorical features 转换为 numerical features。最简单就是 one-hot encoding,把 id 映射成 binary vector。
某个用户没看过的电影,评分就是空出来的。
用线性网络来预测评分的话,需要两个矩阵(两层的权重参数)。每一个 user 在隐含层的输出就相当于直接从 V 中查表。相当于做了一次映射、一次线性组合。
训练的目标函数呢?—— 均方误差呗
比较直接的想法就是,干脆把 R 矩阵分解成两个矩阵相乘的形式就好了。根据已有的评分来学习 W 和 V 的参数。
优化方法:
1. 目标函数如下所示,交替更新 W 和 V 的参数(如果把 R 转置,其实 W 和 V 从形式上就是对称的)。
这种优化方法叫做交替最小二乘,能得到局部最优解。
2.直接用 SGD,更有效率。
梯度公式:
优化过程:
SVD 协同过滤
奇异值矩阵的特征值按照从大到小排列且迅速减小,可以把大矩阵用三个小矩阵来近似描述,实现降维和去噪,应用于协同过滤中可以减少计算量。
用 K 维 SVD 分解做协同过滤,实际上就是找一组 latent variables,U 和 V 分别描述了物品与隐变量、用户与隐变量之间的关系。 然后就可以都在 latent space 中表示。
举例说明,4 个用户对 6 部电影的评分情况
做二维 SVD 分解:
在 latent space 中表示用户和电影,发现电影之间、用户之间、电影和用户之间,都可以衡量中心余弦相似度。
如果出现一个新用户,如何给他推荐他没有看过的电影?
把新用户投影到 latent space
找到和新用户相似度高的用户,把相似用户评分高而新用户没看过的电影,按相似用户的评分高低顺序先后推荐给新用户即可。
Factorization Machine
https://www.cnblogs.com/pinard/p/6370127.html
4. 分类算法
LR(可解释性强,便于做特征工程),朴素贝叶斯
GBDT
5. 回归算法
Ridge, 决策树,支持向量回归
6. 神经网络
YouTube Recommendation System 引出的一系列基于 NN 的推荐模型
7. 图模型
SimRank,马尔可夫模型
8. 隐语义模型
LSA,LDA
协同过滤 Collaborative Filtering的更多相关文章
- 25.推荐---协同过滤(Collaborative Filtering)
协同过滤需要注意的三点: gray sheep(有人喜欢追求特别,协同过滤一般只能从共同的人或物间找相似) shilling attack(水军刷好评导致数据错误,无法带来精确的推荐) cold st ...
- 协同滤波 Collaborative filtering 《推荐系统实践》 第二章
利用用户行为数据 简介: 用户在网站上最简单存在形式就是日志. 原始日志(raw log)------>会话日志(session log)-->展示日志或点击日志 用户行一般分为两种: 1 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
- 【转载】协同过滤 & Spark机器学习实战
因为协同过滤内容比较多,就新开一篇文章啦~~ 聚类和线性回归的实战,可以看:http://www.cnblogs.com/charlesblc/p/6159187.html 协同过滤实战,仍然参考:h ...
- Spark MLlib之协同过滤
原文:http://blog.selfup.cn/1001.html 什么是协同过滤 协同过滤(Collaborative Filtering, 简称CF),wiki上的定义是:简单来说是利用某兴趣相 ...
- CF(协同过滤算法)
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
- 机器学习相关——协同过滤
在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.本文将带你深入了解协同过滤的秘密.下面直接进入正题 1 什么是协同过滤 协同过滤是利用集体智慧的一个典型方法.要理解什么是 ...
- Mahout之(二)协同过滤推荐
协同过滤 —— Collaborative Filtering 协同过滤简单来说就是根据目标用户的行为特征,为他发现一个兴趣相投.拥有共同经验的群体,然后根据群体的喜好来为目标用户过滤可能感兴趣的内容 ...
- 协同过滤(CF)算法
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
随机推荐
- 【小白学PyTorch】5 torchvision预训练模型与数据集全览
文章来自:微信公众号[机器学习炼丹术].一个ai专业研究生的个人学习分享公众号 文章目录: 目录 torchvision 1 torchvision.datssets 2 torchvision.mo ...
- MD5截断比较验证 - 补充
继上篇MD5截断比较验证文章之后有朋友提示除了数字以外,许多字母数字混合的明文在MD5加密之后也是可以达到同样效果的 同时在De1CTF中Web4题目中遇到了另一种较为特殊的截断比较验证,如图所示: ...
- JS 进制转换的理解
该事情的由来是来自于一个面试题,题目是这样的,[1,2,3].map(parseInt)的结果是什么? 作为菜鸟的我们一定是觉得分别把1,2,3分别交给parseInt,无非就是1,2,3嘛.其实结果 ...
- 跟着尚硅谷系统学习Docker-【day06】
day06-20200720 p24.dockerfile案例编写-1 1.创建好容器时,进去容器的时候,修改所在的当前目录. 2.新添加命令.支持vim.ifconfig 备注:原来的镜像容器默 ...
- C++STL中vector的初始化
vector的初始化有很多方式,在N维初始化时还会一些容易出现错误的地方.下面进行总结 以下的总结均以int作为模板参数 一维vector的初始化 vector的构造函数通常来说有五种,如下: vec ...
- SpringBoot简单(登录/显示/登出)工程下载 使用Thymeleaf输出页面文字
下载地址:https://files.cnblogs.com/files/xiandedanteng/SessionShare20191226.zip 测试用,画面如下: SpringMVC入门弟子也 ...
- hadoop不能互相访问和linux防火墙守护进程
前言——作为装过几次集群的菜鸟,对于hadoop集群的安装还是比较有心得的:只要配置文件够好,集群配置就非常容易,否则也容易出现莫名其妙的问题!总结了一份3台机器搭建较完好的集群的一份配置文件. 在我 ...
- 你准备好开始DevOps了吗?
前面一章节我们已经了解了Agile,CI/CD,DevOps,作为DevOps的起点,对于一个团队,如何开始自己的持续集成?根据我的经验,列出了一下需要考虑的点 1. 代码管理/分支策略 代码托管在哪 ...
- ASP.NET Core 配置与获取
目录 1,来自字典 2,来自配置文件 3,层次结构 4,映射 ASP.NET Core 中,可以使用 ConfigurationBuilder 对象来构建. 主要分为三部:配置数据源 -> Co ...
- CentOS 7使用PuppeteerSharp无头浏览器注意事项
环境: CentOS 7.6.1810 .net core 3.1 PuppeteerSharp 2.0.0 1.如网络部稳定可以提前下载需要的chromium 下载地址:https://storag ...