六、推荐系统原理与应用
- 一、推荐系统
- 1.1 推荐系统的应用
- 1.2 什么是推荐系统
- 1.3 推荐系统的意义
- 1.4 推荐系统的结构
- 1.5 推荐系统的评估
- 1.5.1 准确度
- 二、推荐系统的不同类型
- 2.1 基于内容
- 2.2 协同过滤
- 2.2.1 基于用户的协同过滤(user based Collaborative Filtering)
- 2.2.2 基于物品的协同过滤(item-based CF)
- 2.2.3 协同过滤的对比
- 2.2.4 协同过滤的冷启动问题
- 2.3 隐语义模型
- 2.3.1 隐语义模型的思想:
- 2.3.2 假设
- 2.3.3 数学理解
- 2.3.4 隐语义模型要解决的问题
- 2.3.5 隐语义模型的样本问题
- 2.3.6 隐语义模型推导
- 2.3.7 隐语义方法小结
- 2.4 用户行为序列与word2vec
- 三、 推荐系统的一些细节
一、推荐系统
1.1 推荐系统的应用
电子商务,电影视频,音乐电台,社交网络,阅读,基于位置(外卖,打车),个性化邮件,个性化广告
1.2 什么是推荐系统
根据用户的 历史行为 / 点赞 / 页面停留时间 等来推荐用户感兴趣的物品
推荐系统根据用户的以下行为来判断用户当前的需求或感兴趣的点:
- 历史行为
- 社交行为
- 兴趣点
- 所处的上下文环境(上下班时间/周末等)
- …
1.3 推荐系统的意义
目前我们处于互联网数据大爆炸的时代,每天会接收到很多的信息,但是并不是每种信息都感兴趣,所以推荐系统也是解决信息过载问题的思路。
对用户而言:
- 可以找到更感兴趣的东西
- 帮助自己来做决策
- 发现新鲜事物
对商家而言:
- 可以提供个性化的服务,提高信任度和粘度
- 增加营收
1.4 推荐系统的结构
1.5 推荐系统的评估
- 用户满意度:问卷调查
- 预测准确度:评分RMSE, MAE; TopN推荐
- 覆盖率:发现长尾物品
- 多样性:覆盖用户不同兴趣
- 新颖性(流行度反过来)
- 惊喜度,信任度,实时性,健壮性(Robust)
- 商业目标(广告盈利)
1.5.1 准确度
1、打分系统(有用户的打分实际数值,如电影评分3分)
- ruiruir_{ui}:用户uuu对物品i" role="presentation" style="position: relative;">iii的实际评分
- r^uir^ui\hat r_{ui}:用户uuu对物品i" role="presentation" style="position: relative;">iii的预测评分
- |T||T||T|:用户数量
2、Top N推荐(推荐前N个预测的)
系统不会让用户给自己喜欢的东西打分,可以根据停留时间来判断其喜好程度。
- R(u)R(u)R(u):根据训练数据建立的模型在测试集上对用户的推荐
- T(u)T(u)T(u):用户在测试集上的真实选择
准确率vs召回率
准确率:在推荐的商品中,哪些是真正感兴趣的
召回率:在推荐的商品中,占用户感兴趣商品的比例
3、覆盖率(对平台而言)
马太效应:好的越好,坏的越坏,多的越多,少的越少
覆盖率表示了对物品长尾的发掘能力
有两个判别准则,一个维覆盖率Coverage,另一个是熵
Coverage:假如推荐商品类别数量为9w个,而冷门商品虽然被推荐了5000个,但是可能每种只推荐了一次,热门的商品还是被推荐的多,所以仍然会有马太效应。
熵:由于覆盖率仍然会有马太效应,所以用熵来评估推荐物品种类的多样性,已知熵是度量样本不确定性的准则,所以我们希望H越大越好,因为当每个商品被推荐的概率基本相同的时候,熵最大,所以用熵来评估平台对不同商品的推荐覆盖率。
4、多样性(对用户而言)
对用户而言,用户希望系统推荐的某类东西有一定的多样性,也就是有差异,比如颜色,款式等。
5、新颖度:商品给用户的新鲜感(推荐其不知道的商品)
6、惊喜度:与用户的历史兴趣不相似,但是用户确满意的
7、信任度:提供可靠的推荐理由
8、实时性:实时更新程度
二、推荐系统的不同类型
2.1 基于内容
实例:
对不同的书进行推荐:
2.2 协同过滤
协同过滤是一种基于近邻的推荐算法,是根据用户在物品上的行为找到物品或用户的“近邻”。
用户在物品上的行为 ——> 同类用户/同一用户可能喜欢的不同物品
相似度/距离定定义(两者是成反比的):
2.2.1 基于用户的协同过滤(user based Collaborative Filtering)
基于用户有共同行为的物品,计算用户的相似度,找到“近邻”用户,对其近邻在新物品上的评价进行加权推荐。
- 假设有n个用户:ui,i=1,2,...,nui,i=1,2,...,nu_i,i=1,2,...,n
- 假设有m个物品:pj,j=1,2,...,mpj,j=1,2,...,mp_j,j=1,2,...,m
- 得分矩阵vn×mvn×mv_{n\times m},vi×jvi×jv_{i\times j}表示用户i对物品j的打分
- 物品i和物品j的相似度S(i,j)S(i,j)S(i,j)
- 选取TopK推荐或加权预测得分
示例:
同样是对电影评分进行预估,可以通过求列和列之间的相似度,也就是用户和用户之间的相似度,来判定某些相似的用户,从而从和他相似的用户中预估其对电影的打分。
假如用户5和用户3、10的相似度较高,则用用户3和10对第一个电影的评分的加权平均作为用户5对电影1的评分。
2.2.2 基于物品的协同过滤(item-based CF)
基于有相同用户交互的物品,计算物品相似度(A和B),找到物品的近邻(B),对其他喜欢A的用户做推荐。
假设有两种商品A和B,则同时喜欢两者的人群可能是相似性较高的,所以可以判定A和B的相似性应该是接近的,故可以把B推荐给喜欢A的人群。
- 假设有n个用户:ui,i=1,2,...,nui,i=1,2,...,nu_i,i=1,2,...,n
- 假设有m个物品:pj,j=1,2,...,mpj,j=1,2,...,mp_j,j=1,2,...,m
- 得分矩阵vn×mvn×mv_{n\times m},vi×jvi×jv_{i\times j}表示用户i对物品j的打分
- 物品i和物品j的相似度S(i,j)S(i,j)S(i,j)
- 选取TopK推荐或加权预测得分
示例:对空白处进行预估
空白填充的目的:为了根据用户已打分的电影,推断出其没看过的电影的评分,预估出评分之后,按大小排序,推荐预估分数高的电影。
求行和行之间的相似度:
2.2.3 协同过滤的对比
工业界对基于物品的协同过滤用的更多,因为:
- 用户量一般远远大于某类新闻量,计算用户相似度计算量很大
- 人是比较“善变”,兴趣会很快变化,但是物品不会,不同物品的相似度不会改变
- 基于物品的推荐会提供给用户理由,使得推荐更有说服力
协同过滤的优缺点:
2.2.4 协同过滤的冷启动问题
2.3 隐语义模型
用户的评分矩阵有的位置是空着的,我们希望尽量正确的填满未打分的项。
2.3.1 隐语义模型的思想:
肯定会有一些隐藏的因素会影响用户的打分,不一定是人可以直接理解的隐藏因子,但是总会是由些因素影响了你的打分,所以,我们找到隐藏因子,可以对用户和商品进行关联。**
隐语义模型:寻找可能影响用户打分的隐藏因子
2.3.2 假设
隐藏因子个数小于用户和商品数,因为如果每个user都对应一个独立的隐藏因子,就没法做预测了。
2.3.3 数学理解
- R矩阵:用户对物品的偏好信息
- P矩阵:用户对各个物品类别的偏好信息
- Q矩阵:各个物品所归属的物品类别信息
隐语义模型就是要将用户对物品的偏好信息R矩阵,分解为P和Q的乘积,即通过物品类别class将用户和物品联系起来。
假如一个电影刚好不是战争片(得分-1),而用户刚好不喜欢战争片(-1),两者相乘刚好是1,刚好匹配。
2.3.4 隐语义模型要解决的问题
如何对物品进行分类,分成几类?
如何确定用户对哪些物品类别有兴趣,兴趣程度如何?
对于一个给定的类,选择这个类中的哪些物品进行推荐,如何确定物品在某个类别中的权重?
2.3.5 隐语义模型的样本问题
隐语义模型在显性反馈数据(也就是评分数据)上能解决评分预测问题并达到了很好的精度。不过推荐系统主要讨论的是隐性反馈数据集,这种数据集的特点 是只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣)。那么,在隐性反馈数据集上应用隐语义模型解决推荐的第一个关键问题就是如何 给每个用户生成负样本。我们发现对负样本采样时应该 遵循以下原则:
对每个用户,要保证正负样本的平衡(数目相似);
每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品:一般认为,很热门而用户却没有行为更加代表用户对这个物品不感兴趣。因为对于冷门的物 品,用户可能是压根没在网站中发现这个物品,所以谈不上是否感兴趣;
2.3.6 隐语义模型推导
假设:
- UUU个用户
- I" role="presentation" style="position: relative;">III个物品
- RRR为打分矩阵
- K" role="presentation" style="position: relative;">KKK个隐含变量(也就是将物品分为K个类型这是根据经验和业务知识进行反复尝试决定的)
求解:
- 矩阵PU,kPU,kP_{U,k}:用户U对第k个分类的喜爱程度
- 矩阵Qk,IQk,IQ_{k,I}:物品i属于类别k的权重
(1)传统奇异值分解SVD用于推荐
可以将这个用户物品对应的m×n矩阵M进行SVD分解,并通过选择部分较大的一些奇异值来同时进行降维,也就是说矩阵M此时分解为r如下,通过这种方法,我们可以将评分表里面所有没有评分的位置得到一个预测评分。通过找到最高的若干个评分对应的物品推荐给用户:
M_{m×n}=U_{m×k}Σ_{k×k}V_{k×n}^T
SVD的限制:要补值
SVD分解要求矩阵是稠密的,也就是说矩阵的所有位置不能有空白。有空白时我们的M是没法直接去SVD分解的。
传统SVD采用的方法是对评分矩阵中的缺失值进行简单的补全,比如用全局平均值或者用用户物品平均值补全,得到补全后的矩阵。接着可以用SVD分解并降维。
SVD的时间复杂度为O(m^3),用户数和物品一般都是超级大,随便就成千上万了。这么大一个矩阵做SVD分解是非常耗时的。
(2)FunkSVD算法用于推荐
FunkSVD如何将矩阵M分解为P和Q呢?这里采用了线性回归的思想。我们的目标是让用户的评分和用矩阵乘积得到的评分残差尽可能的小,也就是说,可以用均方差作为损失函数,来寻找最终的P和Q。
隐语义模型是根据如下公式来计算用户U对物品I的兴趣度:
如何找到矩阵P/Q的最佳参数:随机初始化之后,利用梯度下降法优化损失函数
损失函数:
下式为正则项:
对两组未知数求偏导:
利用随机梯度下降法得到递推公式:
其中α是在梯度下降的过程中的步长(也可以称作学习速率),这个值不宜过大也不宜过小,过大会产生震荡而导致很难求得最小值,过小会造成计算速度下降,需 要经过试验得到最合适的值。
迭代最终会求得每个用户对于每个隐分类的喜爱程度矩阵P和每个物品与每个隐分类的匹配程度矩阵Q。
在用户对物品的偏好信息矩阵R 中,通过迭代可以求得每个用户对每个物品的喜爱程度,选取喜爱程度最高而且用户没有反馈过的物品进行推荐,也就是还原矩阵的未打分项。
在隐语义模型中,重要的参数有以下4个:
1)隐分类的个数F;
2)梯度下降过程中的步长(学习速率)α;
3)损失函数中的惩罚因子λ;
4)正反馈样本数和负反馈样本数的比例ratio;
这四项参数需要在试验过程中获得最合适的值.1)3)4)这三项需要根据推荐系统的准确率、召回率、覆盖率及流行度作为参考, 而2)步长α要参考模型的训练效率。
(3) BiasSVD算法用于推荐
BiasSVD假设评分系统包括三部分的偏置因素:
- 一些和用户物品无关的评分因素,用户有一些和物品无关的评分因素,称为用户偏置项。
- 而物品也有一些和用户无关的评分因素,称为物品偏置项。这其实很好理解。比如一个垃圾山寨货评分不可能高,自带这种烂属性的物品由于这个因素会直接导致用户评分低,与用户无关。
- 总体偏置项
假设评分系统平均分为μ,第i个用户的用户偏置项为bi,而第j个物品的物品偏置项为bj,则加入了偏置项以后的优化目标函数J(p,q)是这样的
这个优化目标也可以采用梯度下降法求解。和FunkSVD不同的是,此时我们多了两个偏执项bi,bj,,pi,qj的迭代公式和FunkSVD类似,只是每一步的梯度导数稍有不同而已,这里就不给出了。而bi,bj一般可以初始设置为0,然后参与迭代。这里给出bi,bj的迭代方法
通过迭代我们最终可以得到P和Q,进而用于推荐。BiasSVD增加了一些额外因素的考虑,因此在某些场景会比FunkSVD表现好。
2.3.7 隐语义方法小结
FunkSVD将矩阵分解用于推荐方法推到了新的高度,在实际应用中使用也是非常广泛。当然矩阵分解方法也在不停的进步,目前张量分解和分解机方法是矩阵分解推荐方法今后的一个趋势。
对于矩阵分解用于推荐方法本身来说,它容易编程实现,实现复杂度低,预测效果也好,同时还能保持扩展性。这些都是它宝贵的优点。当然,矩阵分解方法有时候解释性还是没有基于概率的逻辑回归之类的推荐算法好,不过这也不影响它的流形程度。小的推荐系统用矩阵分解应该是一个不错的选择。大型的话,则矩阵分解比起现在的深度学习的一些方法不占优势。
2.4 用户行为序列与word2vec
三、 推荐系统的一些细节
六、推荐系统原理与应用相关推荐
- 多传感器融合定位六-惯性导航原理及误差分析
多传感器融合定位六-惯性导航原理及误差分析 1. 惯性技术简介 1.1 惯性技术发展历史 1.2 惯性器件 1.2.1 机械陀螺(几乎没人用了) 1.2.2 激光陀螺 1.2.3 光纤陀螺 1.2.4 ...
- 【转】推荐系统原理、工程、大厂(Youtube、BAT、TMB)架构干货分享
本文汇集了关于推荐系统原理.工程.各大长推荐架构.经验相关的纯干货.原理篇整理了内容推荐.协同推荐.举证分解.模型融合.Bandit和深度学习相关的经典方法.工程篇整理了推荐系统常见架构.关键模块和效 ...
- 【转载】推荐系统原理介绍
猜你喜欢-–推荐系统原理介绍 最近在做推荐系统,在项目组内做了一个分享.今天有些时间,就将逻辑梳理一遍,将ppt内容用文字沉淀下来,便于接下来对推荐系统的进一步研究.推荐系统确实是极度复杂,要走的 ...
- mysql六:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- 干货 :深入浅出之推荐系统原理应用介绍
写在正文之前 最近在做推荐系统,在项目组内做了一个分享.今天有些时间,就将逻辑梳理一遍,将ppt内容用文字沉淀下来,便于接下来对推荐系统的进一步研究.推荐系统确实是极度复杂,要走的路还很长. A Fi ...
- 【推荐算法】今日头条推荐系统原理
据悉,今日头条的信息推荐算法自2012年9月第一版开发运行至今,已经经过四次大调整和修改.目前服务全球亿万用户. 以下为曹欢欢关于<今日头条算法原理>的分享内容(已授权): 本次分享将主要 ...
- [Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- 个性化推荐系统原理介绍(基于内容推荐/协同过滤/关联规则/序列模式/基于社交推荐)...
个性化推荐根据用户兴趣和行为特点,向用户推荐所需的信息或商品,帮助用户在海量信息中快速发现真正所需的商品,提高用户黏性,促进信息点击和商品销售.推荐系统是基于海量数据挖掘分析的商业智能平台,推荐主要基 ...
- 郑捷《机器学习算法原理与编程实践》学习笔记(第四章 推荐系统原理)(三)SVD...
4.5.1 SVD算法回顾 A = U∑VT 其中:A是N*M的矩阵,U是M*M的方阵(里面向量正交,称为左奇异向量),∑是一个M*N的矩阵,VT是一个N*N的矩阵(里面向量正交,右奇异向量) 那么奇 ...
最新文章
- python入门之控制结构-循环结构_(一)Python入门-4控制语句:05while循环结构-死循环处理...
- Linux|UNIX下LAMP环境的搭建及常见问题[连载4]
- SpringMVC学习系列(8) 之 国际化
- Android启动流程
- 初步认识Volatile-总线锁和缓存锁
- 聊聊高并发(三十一)解析java.util.concurrent各个组件(十三) 理解Exchanger交换器
- geth 转账_eth客户端安装 geth使用 批量转账(一)
- android开发基本知识,Android应用开发基本知识点汇总
- 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积
- CREO - 基础3 - 用拉升的方法构建一个双轮胎模型
- 软件测试 学习之路 CSS (二)
- python wxpython backend wxagg_在wxPython中使用draw()(复制轴)绘制不正确
- 多表更新,用一个表更新另外一个表
- java持久层框架mybatis如何防止sql注入
- win10开启多用户同时远程登录-很详细
- 安卓rom制作教程_【ROM】 MIUI10.3.2.0稳定版 通刷包 安卓9 全面屏手势|小爱同学|游戏模式...
- 流程图、框图、UML图、类图
- 安卓中的布局优化之clude、merge、ViewStub
- python加密狗的制作_如何使用U盘制作Windows系统开机加密狗图文教程
- selenium自动化之PO模型
热门文章
- .NET CORE 2.1 导出excel文件的两种方法
- UITableView 点击选中改变字体颜色并记录
- wordpress的手动更新
- 《计算机图形学》2.2.2 光栅扫描显示处理器
- (NO.00004)iOS实现打砖块游戏(八):游戏中小球与砖块的碰撞
- MySQL存储过程中的3种循环
- ITM_win_agentCPU内存占用较高
- Redhat安装tftp的方法
- linux登陆界面卡死_Linux 上最好的五款音乐播放器
- hibernate 双向一对多 关联在多端维护