读书笔记:推荐系统实践-第八章-评分预测问题

1、离线实验方法

  • 测评目的:找到好的模型小化测试集的RMSE
    在这里插入图片描述
  • 划分测试集与训练集
    • 和时间无关的预测任务,可以以均匀分布随机划分数据集
    • 和时 间相关的任务,那么需要将用户的旧行为作为训练集,将用户的新行为作为测试集

2、评分预测算法

2.1 平均值

  • 全局平均值
    在这里插入图片描述
  • 用户评分平均值
    在这里插入图片描述
    在这里插入图片描述
  • 物品评分平均值
    在这里插入图片描述
  • 用户分类对物品分类的平均值,物品和用户分类的依据:流行度和活跃度,平均分
    在这里插入图片描述

2.2 基于邻域的方法

2.2.1 基于用户的邻域方法

在这里插入图片描述

2.2.2 基于物品的邻域方法

在这里插入图片描述
这里,S(i, K)是和i相似的物品集合,N(u)是用户u评过分的物品集合, wij 是物品之间的相 似度, ri (上横)是物品i的平均分。
计算相似度的方法:

  • 余弦相似度
    在这里插入图片描述
  • 皮尔逊系数
    在这里插入图片描述
  • 修正的余弦相似度
    在这里插入图片描述

2.3 隐语义模型与矩阵分解模型

主要的思想就是:通过降维的方法把评分矩阵补全。

2.3.1 传统的SVD分解

评分矩阵R,维度m*n.
首先,对评分矩阵中的缺失值进行补全,比如用全局平均值,或者用户/物品平均值补全,得到补全后的矩阵R’。
随后,用SVD分解,得到, U 、V是两个正交矩阵, S是对角阵,对角线上的每一个元素都是矩阵的奇异值。
在这里插入图片描述
为了对R’进行降维,可以取大的f个奇异值组成对角矩阵Sf,并且找到这f个奇异值中每个值在U、V矩阵中对应的行和列,得到Uf、Vf,从而可以得到一个降维后的评分矩阵。
在这里插入图片描述
这个矩阵在u、i索引上的值,就是用户u对物品i的预测值
SVD分解存在的问题:补全后的稀疏矩阵需要存储非常大的空间;SVD分解方法的计算复杂度很高。

2.3.2 Simon Funk的SVD分解

第二章介绍过。这里从矩阵分解的角度再分析一下。
这个方法实际上将矩阵分解,分解成为了两个低维矩阵相乘
在这里插入图片描述
P的维度是fm,Q的维度是fn,对于用户u对物品i的评分的预测值可以通过下面的公式得到。
在这里插入图片描述
训练的损失函数:
在这里插入图片描述
利用随机梯度下降法可以求得P和Q矩阵的数据。另外,对P和Q初始化的时候最好随机数和1/sqrt(F)成正比。

2.4.3 加入偏置项后的LFM (BiasSVD)

在这里插入图片描述
加入了三个项,分别是:

  • μ 训练集中所有记录的评分的全局平均数
  • bu 用户偏置(user bias)项。这一项表示了用户的评分习惯中和物品没有关系的那种因素
  • bi 物品偏置(item bias)项。这一项表示了物品接受的评分中和用户没有什么关系的 因素。

2.4.4 考虑邻域影响的LFM SVD++

  • 将原本的基于邻域的方法,该成一个可学习的模型,利用损失函数和梯度下降来优化参数:
    在这里插入图片描述
    在这里插入图片描述
  • 考虑到w可能需要太多的存储空间,可以尝试降维成两个矩阵,每个矩阵的维度为n*F,一共2nF个参数。
    在这里插入图片描述
    引入偏置项:
    在这里插入图片描述
    进一步,降低维度,令x=q,得到最终的SVD++
    在这里插入图片描述

2.4 加入时间信息

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

在这里插入图片描述
其中
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

2.5 模型融合

2.5.1 模型级融合

在前一个预测器的基础上设计下一个预测器来最小化损失函数,有点类似于Adaboost,生成新模型,按照一定的参数加到旧模型上面去,是的训练集误差最小化。不同的是,每次训练都是使用所有的样本,而不是错误样本。

2.5.2 模型加权融合

最简单的方法是线性融合,但是线性融合会有过拟合的问题,因此可以采用下面的方法:

  • 假设数据集已经被分为了训练集A和测试集B,那么首先需要将训练集A按照相同的分割方 法分为A1和A2,其中A2的生成方法和B的生成方法一致,且大小相似。
  • 在A1上训练K个不同的预测器,在A2上作出预测。因为我们知道A2上的真实评分值,所 以可以在A2上利用小二乘法①计算出线性融合系数 αk 。
  • 在A上训练K个不同的预测器,在B上作出预测,并且将这K个预测器在B上的预测结果按 照已经得到的线性融合系数加权融合,以得到终的预测结果。

后记:10条经验和教训

  • 确定你真的需要推荐系统。
  • 确定商业目标和用户满意度之间的关系。
  • 选择合适的开发人员。
  • 忘记冷启动的问题。不断地创新,互联网上有任何你想要的数据。只要用户喜欢你的产 品,他们就会不断贡献新的数据。
  • 平衡数据和算法之间的关系。使用正确的用户数据对推荐系统至关重要。对用户行为数据的深刻理解是设计好推荐系统的必要条件,因此分析数据是设计系统中最重要的部分。数据分析决定了如何设计模型,而算法只是决定了最终如何优化模型。
  • 找到相关的物品很容易,但是何时以何种方式将它们展现给用户是很困难的
  • 不要浪费时间计算相似兴趣的用户,可以直接利用社会网络数据
  • 需要不断地提升算法的扩展性
  • 选择合适的用户反馈方式
  • 设计合理的评测系统,时刻关注推荐系统各方面的性能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章