推荐系统实践-评分预测问题(8)

评分预测问题是如何通过已知的用户历史评分记录预测未知的用户评分记录。

1.离线实验方法

评分预测问题基本都通过离线实验进行研究。对于测试集中一对用户和物品(u,i),用户u对物品i的真实评分是r_{ui},推荐算法预测为\hat{r_{ui}},一般用均方根误差RMSE来度量预测的精度:

RMSE=\frac{\sqrt{\sum_{(u,i)\in T}(r_{ui}-\hat{r_{ui}})^2}}{|Test|}

评分预测的目的就是优化此函数,找到使得RMSE最小的模型。

2.评分预测算法

2.1 平均值

最简单的评分预测方法是利用平均值预测用户对物品的评分。

1.全局平均值

在平均值法中最简单的是全局平均值,全局平均值为训练集中所有记录的评分平均值:

\hat{r_{ui}}=\mu=\frac{\sum_{(u,i)\in Train}r_{ui}}{\sum_{(u,i)\in Train}1}

2.用户评分平均值

用户u的评分平均值\bar{r_{u}}定义为用户u在训练集中所有评分的平均值:

\hat{r_{ui}}= \bar{r_u}=\frac{\sum_{i\in N(u)}r_{ui}}{\sum_{i\in N(u)}1}

3.物品评分平均值 

物品i的评分平均值\bar{r_{i}}为物品i在训练集中所有评分的平均值:

\hat{r_{ui}}=\bar{r_{i}}=\frac{\sum_{u\in N(i)}r_{ui}}{\sum_{u\in N(i)}1}

4.用户分类对物品分类的平均值

假设有两类分类函数,一个是用户分类函数\Phi,一个是物品分类函数\varphi\Phi(u)定义了用户u所属的类,\varphi(i)定义了物品i所属的类。用户分类对物品分类的平均值为同类用户对同类物品评分的均值:

\hat{r_{ui}}=\frac{\sum_{(v,j)\in Train,\Phi(u)=\Phi(v),\varphi(i)= \varphi(j)}r_{vj}}{\sum_{(v,j)\in Train,\Phi(u)=\Phi(v),\varphi(i)= \varphi(j)}1}

2.2 基于邻域的方法

1.基于用户的邻域算法

基于用户的邻域算法认为预测一个用户对一个物品的评分,需要参考和这个用户兴趣相似的用户对该物品的评分,即:

\hat{r_{ui}}=\bar{r_u}+\frac{\sum_{v\in S(u,K)\cap N(i)}w_{uv}(r_{vi}-\bar{r_v})}{\sum_{v\in S(u,K)\cap N(i)}|w_{uv}|}

其中S(u,K)是和用户u兴趣相近的K个用户集合,N(i)是对物品i评过分的用户集合,r_{vi}是用户v对物品i的评分,\bar{r_v}是用户v对他评过分的所有物品评分的平均值。用户之间的相似度w_{uv}可以通过皮尔逊系数计算:

w_{uv}=\frac{\sum_{i\in I}(r_{ui}-\bar{r_{u}})\cdot (r_{vi}-\bar{r_v}))}{\sqrt{\sum_{i\in I}(r_{ui}-\bar{r_{u}})^2\sum_{i\in I}(r_{vi}-\bar{r_{v}})^2}} 

2.基于物品的邻域算法

基于物品的邻域算法在预测用户u对物品i的评分时,会参考用户u对和物品i相似的其他物品的评分,即:

\hat{r_{ui}}=\bar{r_i}+\frac{\sum_{j\in S(i,K)\cap N(u)}w_{ij}(r_{uj}-\bar{r_i})}{\sum_{j\in S(i,K)\cap N(u)}|w_{ij}|} 

其中S(i,K)是和i最相似的物品集合,N(u)是用户u评过分的物品集合,w_{ij}是物品之间的相似度,\bar{r_i}是物品i的平均分。关于相似度计算一般有三种方法:

1.余弦相似度:

w_{ij}=\frac{\sum_{u\in U}r_{ui} \cdot r_{uj}}{\sqrt{\sum_{u\in U}r_{ui}^2\sum_{u\in U}r_{uj}^2}}

2.皮尔逊系数:

w_{ij}=\frac{\sum_{u\in U}(r_{ui}-\bar{r_i})\cdot(r_{uj}-\bar{r_j})}{\sqrt{\sum_{u\in U}(r_{ui}-\bar{r_{i}})^2\sum_{u\in U}(r_{uj}-\bar{r_{j}})^2}}

 3.修正的余弦相似度:

w_{ij}=\frac{\sum_{u\in U}(r_{ui}-\bar{r_u})\cdot(r_{uj}-\bar{r_u})}{\sqrt{\sum_{u\in U}(r_{ui}-\bar{r_{u}})^2\sum_{u\in U}(r_{uj}-\bar{r_{u}})^2}}

3.隐语义模型和矩阵分解模型

潜语义模型和矩阵分解模型是通过降维的方法将评分矩阵补全。将用户的评分行为表示为一个评分矩阵R,其中R[u][i]表示用户u对物品i的评分。矩阵中有些空的元素,称为缺失值。

1.传统的SVD分解

我们要找一种对矩阵扰动最小的补全方法,如果补全后的矩阵和之前矩阵的特征值相差不大,就认为是扰动比较小。给定m个用户和n个物品,和用户对物品的评分矩阵R,首先对缺失项进行简单补全(例如用全局平均值等)得到补全后的矩阵R‘。随后我们用SVD分解将R’分解成如下形式:

R^{'}=U^TSV

为了对R‘进行降维,取最大的f个奇异值组成对角矩阵S_f,然后找到f个奇异值中每个值在U,V矩阵中对应的行和列,得到U_fV_f即可得到降维的矩阵:

R_f^{'}=U_f^TS_fV_f

关于SVD可以参考【机器学习】【SVD-3】SVD降维的应用简介 + 降维示例展示 + Python代码实现_CV_ML_DP的博客-CSDN博客

2.Simon Funk的SVD分解

即前面第二章提到过的LFM。

3.加入偏置项后的LFM

原始的LFM预测公式为:

\hat{r_{ui}}=\sum_{f}p_{uf}q_{if}

此公式通过隐类将物品和用户联系起来,但是用户有些属性和物品无关,物品也有些属性和用户无关,因此提出BiasSVD,加入三个偏置项:

 \hat{r_{ui}}=\mu+b_u+b_i+\sum_{f}p_{uf}q_{if}

其中μ为训练集中所有记录的评分的全局平均数,因为每个网站评分不同,有些网站打分高,有些网站打分低,因此加入平均数进行修正。

b_u为用户偏置项,表示了用户评分习惯中和物品没有关系的那种因素,比如有些用户本身就比较苛刻,打分低等。

b_i为物品偏置项,表示物品接受评分和用户无关的因素,如物品质量很高,得分一般较高的因素。

4.考虑邻域影响的LFM

LFM模型没有考虑用户的历史行为对用户评分预测的影响,提出SVD++,将基于邻域的方法也像LFM一样可以进行学习。将ItemCF的预测算法改为:

\hat{r_{ui}}=\frac{1}{\sqrt{|N(u)|}}\sum_{j\in N(u)}w_{ij}

其中w_{ij}不再是物品相似度,变为和P,Q一样的参数,可以通过优化损失函数进行学习的项:

C(w)=\sum_{(u,i)\in Train}(r_{ui}-\sum_{j\in N(u)}w_{ij}r_{uj})^2+\lambda w_{ij}^2 

但此时参数过多,共有n^2个参数,将w矩阵进行分解,可以降低参数的数量,模型如下:

\hat{r_{ui}}=\frac{1}{\sqrt{|N(u)|}}\sum_{j\in N(u)}x_i^{T}y_j=\frac{1}{\sqrt{|N(u)|}}x_i^{T}\sum_{j\in N(u)}y_j

将LFM和此模型相加,同时为了减少参数数量,令x=q得到SVD++模型:

 \hat{r_{ui}}=\mu+b_u+b_i+q_i^{T}\cdot(p_u+\frac{1}{|N(u)|}\sum_{j\in N(u)}y_j)

4.加入时间信息

利用时间信息方法主要分为两种,分别为将时间信息应用到基于邻域的模型和应用到矩阵分解模型。

1.基于邻域的模型融合时间信息

融合时间信息的基于邻域的模型称为TItemCF,该算法通过如下公式预测用户在某一个时刻会给物品什么评分:

\hat{r_{uit}}=\frac{\sum_{j\in N(u)\cap S(i,k)}f(w_{ij},\Delta t)r_{ui}}{\sum_{j\in N(u)\cap S(i,k)}f(w_{ij},\Delta t)}

\Delta t=t_{ui}-t_{uj}是用户u对物品i和j评分的时间差,w_{ij}为物品相似度,f(w_{ij},\Delta t)是一个考虑了时间衰减后的相似函数,即提高最近的行为对推荐结果的影响。f定义如下:

f(w_{ij},\Delta t)=\sigma(\delta\cdot w_{ij}\cdot exp(\frac{-|\Delta t|}{\beta})+\gamma)

\sigma(x)=\frac{1}{1+exp(-x)} 

2.基于矩阵分解的模型融合时间信息 

TSVD

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值