推荐系统实例
在搭建好了推荐系统外围架构(界面展示和用户行为数据)后,进行推荐系统的架构。一个推荐系统包括多个推荐引擎,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或优先级合并、排序然后返回。
用户反馈是推荐系统的重要组成部分,主要通过分析之前和推荐结果的交互日志,预测用户会对什么样的推荐结果感兴趣,然后针对用户实现不同的推荐策略。
评分预测问题
因为用户不可能对所有物品都评分,因此评分预测问题就是如何通过已知的用户历史评分记录预测未知的用户评分记录。
Netflix通过如下方式划分数据集:
首先将用户的评分按时间排序,然后将用户最后10%的评分作为测试集,前90%的评分记录作为训练集。
评分预测算法
最简单的评分预测算法
:利用平均值预测用户对物品的评分
- 全局平均值(一个评分系统有些固有属性与用户物品无关,在不同的网站中,因为网站定位和销售的物品不同,网站的整体评分分布也会显示出一些差异)
定义为:训练集中所有评分记录的评分平均值。
- 用户评分平均值 (用户的评分习惯中和物品没有关系的那种因素,比如有些用户苛刻,有些用户宽容)
定义为用户 u u u在训练集中所有评分的平均值。
- 物品评分平均值 (物品接受的评分中和用户没有关系的因素,如物品的质量高低,会导致评分高低)
定义为:物品 i i i在训练集中接受的所有评分的平均值:
- 用户分类对物品分类的平均值
用户分类:1)将用户按照用户平均分平均分成N类;
2)按用户活跃度平均分成N类。
物品分类:1)将物品按照物品平均分平均分成N类;
2)按物品流行度平均分成N类。
可以利用训练集中同类用户对同类物品评分的平均值,预测用户对物品的评分。
基于邻域的方法
基于用户的邻域算法认为预测一个用户对一个物品的评分,需要参考和这个用户兴趣相似的用户对该物品的评分。
S
(
u
,
K
)
S(u,K)
S(u,K)是 和用户u兴趣最相似的K各用户的集合,
N
(
i
)
N(i)
N(i)是物品i评过分的用户集合,
r
v
i
r_{vi}
rvi是用户v对物品i的评分,
r
v
ˉ
\bar{r_{v}}
rvˉ是用户v对他评过分的所有物品评分的平均值。
用户之间的相似度
w
u
v
w_{uv}
wuv可以通过皮尔逊系数计算:
基于物品的邻域算法
S
(
i
,
K
)
S(i,K)
S(i,K)是和物品i最相似的物品集合,
N
(
u
)
N(u)
N(u)是用户u评过分的物品集合,
r
i
ˉ
\bar{r_{i}}
riˉ是物品i的平均分。
比较了三种主要的相似度:
隐语义模型与矩阵分解模型
本质上是通过降维的方法将评分矩阵补全。
总体的思想是:借助 SVD 可以将一个相互垂直的网格 (orthogonal grid) 变换到另外一个互相垂直的网格。
- Funk-SVD(LFM):
从矩阵分解的角度说,如果将评分矩阵R分解为两个低维矩阵相乘:
R ^ = P T Q \hat{R_{}}=P^{T}Q R^=PTQ
那么对于用户u对物品i的评分的预测值为:
利用RMSE作为评测指标,如果能找到合适的P、Q最小化训练集的预测误差,那应该也能最小化测试集的预测误差。
损失函数定义为:
为防止过拟合,加入过拟合项:
- 加入偏置项后的LFM:
μ \mu μ 全局平均数, b u b_{u} bu 为用户评分平均数, b i b_{i} bi为物品评分平均数。 - 考虑邻域影响的LFM
SVD++
显示地考虑将用户的历史评分的物品加入到LFM模型中:
ItemCF预测算法:
与p,q类似, w i j w_{ij} wij变为参数。类似地,损失函数为:
对 w w w矩阵进行矩阵分解,即: w i j = x i T y j w_{ij}=x_{i}^{T}y_{j} wij=xiTyj
然后与LFM模型相加,得到如下模型即SVD++:
为避免太多参数造成过拟合,可令 x = q x=q x=q.
加入时间信息
TItemCF:预测用户在某一时刻会给物品什么评分:
模型融合
1) 模型级联融合
2)模型加权融合