原理篇——矩阵分解#
基于模型的,基于近邻的可能存在的问题:
* item之间存在相关性,信息量不是随着向量维度的增加而线性增加
* 由于矩阵是稀疏的,增减一个维度,计算的相似度很不稳定
1.SVD分解系列#
假设每个用户对item的打分都会潜在的从k个维度出发,每个人在这k个维度上的偏好是不同的,每个物品i在这k个维度上的表现qi也是不同的,则直观上
r_{ui}=p_uq_i^T
因此机器学习的目标就是min \sum(r_{ui}-p_uq_i^T)^2+\lambda(||q_i||^2+||p_u||^2)
通过迭代的方式找到最优解
偏置-改进版
即考虑到不同人的评分偏好,每个人的严格程度不同,考虑到不同电影本身的偏置。
r_{ui}=u_i+b_i + b_u + p_uq_i^T
全局平均分、物品的评分偏置、用户评分的偏置、用户和物品之间的兴趣偏好。
和基本的SVD相比,要学习的参数变多了,学习的算法还是一样的。
增加历史行为
考虑推荐系统中常见的问题,
显示反馈比较少,即大部分用户可能是没有反馈信息的。另外一个问题是除了反馈信息外,像用户的个人属性比如性别年龄如何加入到模型中。
SVD++模型。 比如没有产生购买的,用有过浏览的物品
考虑时间因素
比如:
(1)对评分按照时间加权,让久远的评分更趋近平均值
(2)对评分时间划分时间区间段,不同的时间区间段内分别学习出隐因子向量,特殊的节日也用隐因子向量表示。
2.faceBook#
上面说的矩阵分解,具体的求解方法一般有两种,一个是随机梯度下降,另个一个是交替最小而成ALS
隐式反馈
相比于预测会打大少分,预测会不会去浏览更加有意义,而且数据相对来说没那么稀疏。
样本平衡问题,对于没有反馈的缺失值,因为不知道其究竟是没有反馈导致的缺失还是说是不感兴趣导致的缺失,所以不能将所有的缺失当做负类。 一般有两种方法
- 随机均匀采样,和正类一样多(不推荐)
- 按照物品的热门程度采样。 其基本思想是:一个越热门的物品,用户知道他的可能性就越大,exam的可能性越大,那么在这种情况下用户还没对他反馈就表明他大概率就是个负样本了。
3.BPR 贝叶斯个性化排序#
前面说的基于矩阵的排序方法是point-wise的,即预测单个用户对单个物品的满意度,然后按照这个满意度的绝对值进行排序
还有一种思路是pair-wise的,即不关心绝对值是多少,而关注两个结果之间的相对排序。
关注模型预测精度的时候用的是均方根误差,而相对排序用的是AUC。AUC 这个值在数学上等价于:模型把关心的那一类样本排在其他样本前面的概率。最大是 1,完美结果,而 0.5 就是随机排列,0 就是完美地全部排错。
BPR的主要步骤如下
(1) 构造样本
相比于传统的矩阵分解中的(用户,物品,反馈)这种形式,BPR构造的数据样本是 (用户,物品1,物品2,两个物品的相对顺序)