打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
推荐系统算法之 surprise 实战

图片来自Overview of Recommender Algorithms

上一篇推荐系统之用户行为分析介绍了一些基本推荐算法,本文将通过 surprise 库来深入分析这些算法。

NormalPredictor

第一种预测方法是假设评分数据来自于一个正态分布,下面对这个问题进行建模。

问题:若给定一组样本 x 1 ,x 2 …x n ,已知它们来自于 高斯分布 N(μ,σ),试估计参数μ,σ。

高斯分布的概率密度函数:

将 X i 的样本值 x i 带入,得到:

我们将 L(x) 求 log,并且化简式子:

最后我们对式子求导求,就能得到μ,σ:

看代码:

BaselineOnly

第二个算法是根据 Factor in the neighbors: scalable and accurate collaborative filtering 所得到,算法发现传统 CF 方法的一些问题:

  • 不同 item 的评分不同

  • 不同用户的评分也不同

  • 评分随着时间一直在变化

于是提出了下面的 baseline model:

其中 u 是平均得分,bu 是用户的偏置,bi 是 item 的偏置,等价于求下面的极值问题:

可以求得下面的 bu 和 bi:

我们可以再看 surprise 中代码,里面的实现是:

运行代码可得:

可以发现结果是好于 NormalPredictor 的。

KNNBasic

KNNBasic 是基本的 CF 算法,user-based 或者 item-based

计算 user-user 的相似性,或者计算 item-item 的相似性。

可以看到这个结果略差于 BaselineOnly

KNNWithMeans

KNNWithMeans 基于的一个假设也是用户和 item 的评分有高低,去除一个平均值后再计算。

通过均值的方法来计算结果略优于 KNNBasic

KNNBaseline

KNNBaseline 是在 KNNWithMeans 基础上,用 baseline 的值来替换均值,计算公式如下:

可以看到使用 KNNBaseline 方法是目前最好的结果。

SVD

从这个算法开始是使用矩阵分解算法来做了,先是最基本的 svd 方法。

先定义预估值:

在定义 loss

最后是更新方式:

其中 eui 是残差

核心代码:

svd++

预测的精度不仅要考虑显示的反馈,也需要考虑一些隐反馈

  • 显性反馈行为包括用户明确表示对物品喜好的行为:主要方式就是评分和喜欢 / 不喜欢;

  • 隐性反馈行为指的是那些不能明确反应用户喜好的行为:最具代表性的隐性反馈行为就是页面浏览行为;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【干货】推荐系统原理介绍
推荐系统与协同过滤、奇异值分解
SVD(奇异值分解)算法及其评估
推荐算法(1):协同过滤总结
“想你所想”之个性化推荐:实践与优化
短视频内容理解和推荐算法比赛大揭秘
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服