图片来自Overview of Recommender Algorithms
上一篇推荐系统之用户行为分析介绍了一些基本推荐算法,本文将通过 surprise 库来深入分析这些算法。
第一种预测方法是假设评分数据来自于一个正态分布,下面对这个问题进行建模。
问题:若给定一组样本 x 1 ,x 2 …x n ,已知它们来自于 高斯分布 N(μ,σ),试估计参数μ,σ。
高斯分布的概率密度函数:
将 X i 的样本值 x i 带入,得到:
我们将 L(x) 求 log,并且化简式子:
最后我们对式子求导求,就能得到μ,σ:
看代码:
第二个算法是根据 Factor in the neighbors: scalable and accurate collaborative filtering 所得到,算法发现传统 CF 方法的一些问题:
不同 item 的评分不同
不同用户的评分也不同
评分随着时间一直在变化
于是提出了下面的 baseline model:
其中 u 是平均得分,bu 是用户的偏置,bi 是 item 的偏置,等价于求下面的极值问题:
可以求得下面的 bu 和 bi:
我们可以再看 surprise 中代码,里面的实现是:
运行代码可得:
可以发现结果是好于 NormalPredictor 的。
KNNBasic 是基本的 CF 算法,user-based 或者 item-based
计算 user-user 的相似性,或者计算 item-item 的相似性。
可以看到这个结果略差于 BaselineOnly
KNNWithMeans 基于的一个假设也是用户和 item 的评分有高低,去除一个平均值后再计算。
通过均值的方法来计算结果略优于 KNNBasic
KNNBaseline 是在 KNNWithMeans 基础上,用 baseline 的值来替换均值,计算公式如下:
可以看到使用 KNNBaseline 方法是目前最好的结果。
从这个算法开始是使用矩阵分解算法来做了,先是最基本的 svd 方法。
先定义预估值:
在定义 loss
最后是更新方式:
其中 eui 是残差
核心代码:
预测的精度不仅要考虑显示的反馈,也需要考虑一些隐反馈
显性反馈行为包括用户明确表示对物品喜好的行为:主要方式就是评分和喜欢 / 不喜欢;
隐性反馈行为指的是那些不能明确反应用户喜好的行为:最具代表性的隐性反馈行为就是页面浏览行为;
联系客服