推荐系统中的协同过滤算法一般分为两大类:
- 基于行为的协同过滤算法(Memory-Based CF),利用用户行为数据计算相似度,包括用户之间的相似度和物品之间的相似度。
- 基于模型的协同过滤算法(Model-Based CF),利用机器学习算法预测用户的喜好程度,一般用户数据较为稀疏的时候更适合这种方法。
本文主要介绍Model-Based协同过滤算法
1、Model-Based CF基于模型协同过滤算法
利用用户-物品评分矩阵训练机器学习模型,从而预测用户对物品的评分,主要可以分为以下几类:
- 基于分裂、回归或者聚类算法
- 基于矩阵分解的推荐算法
- 基于神经网络算法
- 基于图模型算法
2、基于回归模型算法的协同过滤
回归模型的前提是连续的值,我们将评分看做连续的值,采用以下Baseline(基准预测)实现策略。其思想是运用每个人的偏好不同:
有些用户比较好心,他的评分高于其他用户,有些用户比较苛刻,他的评分低于其他用户;而部分物品比较受欢迎,它的评分高于一般物品,部分物品可能会被嫌弃,它的评分会低于一般物品。
而Baseline则是通过找出每个用户与其他用户的评分偏置值bub_ubu,每个物品与其他物品的偏置值bib_ibi,最终的目标也就变成了寻找最优的bub_ubu和bib_ibi。所以Baseline算法的步骤如下:
- 计算所有电影的平均评分uuu;
- 计算每个用户的评分与平均评分的偏置值bub_ubu;
- 计算每部电影的评分与平均评分的偏置值bib_ibi;
- 预测用户对电影的评分:
r^ui=bui=u+bu+bi\hat{r}_{ui} = b_{ui} = u+b_u+b_ir^ui=bui=u+bu+bi
以用户A对《封神第一部》的评分为例:
- 首先计算所有电影的平均评分u=3.5u=3.5u=3.5;
- 用户A比较好心,普遍比平均分高1分,偏置值bu=1b_u=1bu=1;
- 《封神第一部》一开始差评比较多,评分比平均分低0.5分,偏置值bi=−0.5b_i=-0.5bi=−0.5;
- 则用户A对《封神第一部》的评分为:3.5+1-0.5=4.1分。
在线性回归问题中,我们用平方差构建损失函数:
Cost=∑u,i∈R(rui−r^ui)2=∑u,i∈R(rui−u−bu−bi)2Cost = \sum_{u,i∈R}(r_{ui}-\hat{r}_{ui})^2 = \sum_{u,i∈R}(r_{ui}-u-b_u-b_i)^2 Cost=u,i∈R∑(rui−r^ui)2=u,i∈R∑(rui−u−bu−bi)2
为了防止过拟合,需要加入L2范式,最后的公示如下:
Cost=∑u,i∈R(rui−u−bu−bi)2+λ(∑ubu2+∑ibi2)Cost = \sum_{u,i∈R}(r_{ui}-u-b_u-b_i)^2 + \lambda(\sum_u{b_u}^2+\sum_i{b_i}^2)Cost=u,i∈R∑(rui−u−bu−bi)2+λ(u∑bu2+i∑bi2)
我们希望得到损失函数的最小值,一般会采用随机梯度下降法或者最小二乘法来优化实现。
2.1 Baseline随机梯度下降法算法
step1:梯度下降法推导:
J(θ)=f(bu,bi)J(θ) = f(b_u,b_i)J(θ)=f(b