基于协同的SlopeOne推荐算法原理介绍和实现
Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个 Item-Based 的协同过滤推荐算法。 ——文章概要
该篇文章主要介绍Slope One算法。Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个 Item-Based 的协同过滤推荐算法。和其它类似算法相比, 它的最大优点在于算法很简单, 易于实现, 执行效率高, 同时推荐的准确性相对较高。
-
协同过滤算法理解和Python实现
-
基于标签的推荐算法
-
基于图的推荐算法
经典的ItemCF的问题
经典的基于物品推荐,相似度矩阵计算无法实时更新,整个过程都是离线计算的,而且还有另一个问题,相似度计算时没有考虑相似度的置信问题。例如,两个物品,他们都被同一个用户喜欢了,且只被这一个用户喜欢了,那么余弦相似度计算的结果是 1,这个 1 在最后汇总计算推荐分数时,对结果的影响却最大。
Slope One 算法针对这些问题有很好的改进。不过 Slope One 算法专门针对评分矩阵,不适用于行为矩阵。
Slope One算法过程
Slope One 算法是基于不同物品之间的评分差的线性算法,预测用户对物品评分的个性化算法。
Slope算法主要分为3步
1. 计算物品之间的评分差的均值,记为物品间的评分偏差 (两物品同时被评分)
( r_ui – r_uj ) 表示评分的差,这里需要注意的是j相对i的评分偏差是 r_ui – r_uj ,如果是i相对j的评分偏差则是 r_uj – r _ui,两 者是互为相反数的关系。
其中:
-
r_ui :用户u对物品i的评分
-
r_uj :用户u对物品j的评分
-
N(i) :物品i评过分的用户
-
N(j) :物品j评过分的用户
-
N(i) 交 N(j) :表示同时对物品i 和物品j评过分的用户数。
2. 根据物品间的评分偏差和用户的历史评分,预测用户对未评分的物品的评分。
其中:
-
N(u) :用户u评过分的物品
3. 将预测评分进行排序,取Top N对应的物品推荐给用户
实例说明
例如现在有一份评分数据,表示用户对电影的评分:
现在我们来预测预测每个用户对未评分电影的评分。
Step1: 计算物品之间的评分偏差,以U1为例:
同理可以计算出电影b,c,d,e与其他电影的评分偏差。
Step2: 计算用户对未评分物品的可能评分(为了方便计算,这里以U2为例)
由上表可知,用户U2 对电影a没有评分,这里计算用户U2对电影a的评分。
Step3: 评分排序
由于给定样例中,U2只对a没有评过分,所以这里不需要进行排序,正常的话,按分数进行倒排就行。
代码实现
这里采用Python实现,在实现过程中并没有考虑算法的复杂度问题。
加载数据
计算物品之间的评分偏差
计算预估评分
主函数调用
打印结果为:
和上边我们计算的结果一致。
完整代码在: https://github.com/Thinkgamer/Machine-Learning-With-Python/tree/master/Recommend
应用场景
该算法适用于物品更新不频繁,数量相对较稳定并且物品数目明显小于用户数的场景。比较依赖用户的用户行为日志和物品偏好的相关内容。
其优点:
-
算法简单,易于实现,执行效率高;
-
可以发现用户潜在的兴趣爱好;
其缺点:
-
依赖用户行为,存在冷启动问题和稀疏性问题。
《推荐系统开发实战》是目前已经在京东非自营上线 ,期待自营的上市,感兴趣的朋友可以进行关注!
在这浮躁的社会沉静,用心记录,用心学习!

关于【搜索与推荐Wiki】
专注于推荐系统,深度学习,机器学习,数据挖掘,云计算,人工智能,架构和编程等技术干货的分享和探讨,偶尔会推送一些福利,文字,摄影和游记,扫码关注,不再孤单。
更多干货,扫码关注
热
相关文章
《推荐系统开发实战》之三大案例带你从0到1自己实现一个推荐系统
《推荐系统开发实战》之基于点击率预估的推荐算法介绍和案例开发实战
《推荐系统开发实战》之基于上下文的推荐算法介绍和案例实战开发
《推荐系统开发实战》之基于用户行为特征的推荐算法介绍和案例实战开发
《推荐系统开发实战》之从搭建一个电影推荐系统开始学推荐系统开发实战
欢迎投稿,凡是投稿一经录用者,赠送技术图书和相关学习资料
国内各大互联网公司,可内推
关注公众号,加小编微信,拉你进
【 数据与算法交流群 】
你点的每个 “在 看” ,我都认真当成了喜欢