https://blog.csdn.net/jliang3
1.重点归纳
1)评分预测问题只是很典型,其实并不大众,毕竟在实际的应用中,评分数据很难收集到;与之相对的另一类问题是行为预测才是平民级推荐问题。在真正的推荐系统的实际应用中,评分预测实际上场景很少,而且数据很少,相比预测评分,预测“用户会对物品干出什么事”会更加有效。
2)矩阵分解
(1)矩阵分解常用的方法是SVD(奇异值分解)把用户和物品都映射到一个k维空间中,分解后的矩阵实质上就是得到了每个用户和每个物品的隐因子向量,拿着物品和用户两个向量计算点积就是推荐分数了。
(2)为了解决不同用户的评分标准不一样,以及某些物品存在一些铁粉这样的问题,引入了偏置信息,包括:全局评分、物品评分偏置、用户评分偏置:
(3)为了解决用户显式反馈比较少,引入用户隐式反馈以及用户属性等信息,SVD中结合用户隐式反馈行为和属性的模型叫SVD++。
(4)考虑时间因素
3)矩阵分解要将用户物品评分矩阵分解成两个小矩阵,一个代表用户偏好的用户隐因子向量组成,另一个矩阵代表物品语义主题的隐因子向量组成,两者是一一对应的,用户的兴趣就表现在物品的语义维度上。
(1)矩阵分解时经常使用交替最小二乘进行求解,先固定其中一个矩阵,利用线性代数对另外一个矩阵进行求解;然后再反过来另一个矩阵,再对第一个矩阵求解;反复求解直至误差很小。
(2)在对隐式反馈进行预测时,只有明确的某类已经干过的正类(One-Class问题),负类数据靠采样获取(随机均匀采样或按照热门程度采样),使用加权交替最小二乘(Weighted-ALS)进行求解
(3)让用户和物品的隐因子向量两两相乘,计算点积就可以得到所有推荐的结果。但是在数据量巨大时实际复杂度很高,一般采取以下两种方式来解决
4)贝叶斯个性化排序(Bayesian Personalized Ranking,BPR)直接预测物品两两之间的相对顺序(pair-wise问题)
(1)BPR构造样本
BPR提出要关心物品之间对于用户的相对顺序,构造的样本是:用户、物品1、物品2、两个物品相对顺序
(2)最大化交叉熵就是BPR目标函数,最大化目标函数就能得到分解后的矩阵参数。
(3)训练方法
BPR使用了一个介于批量下降法和随机梯度下降法的训练方法,结合重复抽样的梯度下降:
2.那些在Netflix Prize中大放异彩的推荐算法
1)近邻模型的问题
(1)物品之间存在相关性,信息量并不随着向量维度增加而线性增加。
(2)矩阵元素系数,计算结果不稳定,增减一个向量维度,导致近邻结果差异很大的情况存在。
矩阵分解可以解决这两个问题。矩阵分解就是把原来的大矩阵,近似分解成两个小矩阵的乘积,在实际推荐计算时直接使用两个小矩阵。
2)基础的SVD算法
(1)矩阵分解常用的方法是SVD(奇异值分解),由于向量是稀疏的,无法直接进行奇异值分解,在推荐算法中使用的并不是正统的奇异值分解,而是一个伪奇异值分解。
(2)矩阵分解就是把用户和物品都映射到一个k维空间中,这个k维空间不是我们直接看到的,也不具有很好的解释性,每个维度也没有名字,所以常常称为隐因子,代表隐藏在直观的矩阵数据下面。
(4)得到分解后的矩阵实质上就是得到了每个用户和每个物品的隐因子向量,拿着物品和用户两个向量计算点积就是推荐分数了。
3)SVD算法增加偏置信息
(1)原因:有一些用户给出偏高的评分(比如标准宽松的用户),有些物品也会收到偏高的评分(如目标观众为铁粉的电影),甚至有可能整个平台的全局评分就偏高。
(2)增加偏置:一个用户给一个物品的评分由四部分相加
4)SVD算法增加历史行为
(1)原因:用户评分比较少,显示反馈比隐式反馈少,使用隐式反馈弥补这个问题;另外再考虑一些用户的个人属性(如性别等)加入模型来弥补冷启动的不足。SVD中结合用户隐式反馈行为和属性的模型叫SVD++。
(2)隐式反馈加入
(3)用户属性加入
5)考虑时间因素
(1)对评分按照时间加权,让久远的评分更趋近平均值
(2)对评分时间划分区间,不同时间区间内分别学习隐因子向量,使用时按照区间使用对应的因因子向量来计算
(3)对特殊的期间,如节日、周末等训练对应的隐因子向量
3.Facebook是怎么为十亿人互相推荐好友的
1)矩阵分解要将用户物品评分矩阵分解成两个小矩阵,一个代表用户偏好的用户隐因子向量组成,另一个矩阵代表物品语义主题的隐因子向量组成,两者是一一对应的,用户的兴趣就表现在物品的语义维度上。两个小矩阵相乘得到的矩阵的维度与用户物品评分矩阵一模一样。
(1)这两个矩阵的特点:
(2)目标函数的优化方法常用有两个:随机梯度下降(SGD)和交替最小二乘法(ALS)。实际应用中交替最小二乘法更常用一些。
2)交替最小二乘原理
(1)我们的任务是找到两个矩阵P和Q,让它们相乘后约等于原矩阵R:
(2)最小二乘的步骤:
(3)ALS好处
3)隐式反馈
(1)矩阵分解算法是为解决评分预测问题而生的,然而实际应用中用户的隐式反馈数据更多。
One-Class问题:如果把预测用户行为看成二分类问题,猜用户会不会做某件事实际上收集到的数据只有明确的一类(用户干了某事),而用户“不干”某件事的数据没有明确表达。
(2)交替最小二乘法改进版:加权交替最小二乘(Weighted-ALS)
行为的次数是对行为的置信度反应,也就是所谓的加权。
(3)加权交替最小二乘法对待隐式反馈的方式
(4)取值为0的数据非常多,不能一股脑使用所有缺失值(评分为0的数据)作为负类,矩阵分解的初心是要填充这些值。解决这个问题的方法是负样本采样,挑一部分缺失值作为负类样本。挑选方法:
4)推荐计算
让用户和物品的隐因子向量两两相乘,计算点积就可以得到所有推荐的结果。但是在数据量巨大时实际复杂度很高,Fackbook提出两个办法来得到真正的推荐结果:
4.如果关注排序效果,那么这个模型可以帮到你
1)矩阵分解本质上是在预测用户对一个物品的偏好程度。针对单个用户对单个物品的偏好程度进行预测,得到结果后再排序的问题叫point-wise。直接预测物品两两之间的相对顺序问题叫pair-wise。
(1)point-wise模型的问题:只能收集到正样本,没有负样本,于是认为缺失值就是负样本,再以预测误差为评判标准去逼近这些样本。
(2)更直接的推荐模型是能够较好地为用户排列出更好的物品相对顺序,而非精确评分。
2)贝叶斯个性化排序(Bayesian Personalized Ranking,BPR)
(1)评价模型预测精准程度可以使用AUC,ACU这个值在数学上等价于:模型把关心的那一类样本排在其他样本前面的概率。最大是1,0.5就是随机排序,0就是全部排错。
(2)AUC计算
3)BPR做法
(1)样本构造方法
(2)模型目标函数
(3)模型学习框架
4)BPR构造样本
(1)BPR提出要关心物品之间对于用户的相对顺序,构造的样本是:用户、物品1、物品2、两个物品相对顺序
(2)两个物品的相对顺序
5)BPR目标函数
Xu12表示用户u,物品1和物品2的矩阵分解预测分数差,然后再用sigmoid把分数压缩到0-1之间。
(2)通常还要加入L2正则项,正则项其实认为模型参数还有个先验概率,所以BPR名字中的贝叶斯的由来。BPR认为模型的先验概率符合正态分布。
6)训练方法
(1)BPR使用了一个介于批量下降法和随机梯度下降法的训练方法,结合重复抽样的梯度下降: