版权声明:本文为CSDN博主「心雨心辰」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/xidianliutingting/article/details/51916578 做了部分改动
示例
多个吃货在某美团的某家饭馆点餐,如下两道菜:1. 可乐鸡翅 2. 披萨
在吃过之后,分别给出了如下的评价
可乐鸡翅 | 披萨 | |
---|---|---|
小明 | 4 | 5 |
小红 | 4 | 3 |
小华 | 2 | 3 |
小伟 | 2 | ? |
问题是问小伟对披萨的评分会是多少呢?
解题思路:已知4位同学对可乐鸡翅的评价,计算另外3位同学对可乐鸡翅的评分与对披萨评分的差值的平均数 a
(保留正负值),然后用小伟对可乐鸡翅的评分加上 a
即可得到小伟与披萨的预估评分。
这个解题思路,就是Slope-one方法的解题思路。
算法思想
Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个Item-Based 的协同过滤推荐算法。和其它类似算法相比, 它的最大优点在于算法很简单, 易于实现, 执行效率高, 同时推荐的准确性相对较高。
Slope One算法是基于不同物品之间的评分差的线性算法,预测用户对物品评分的个性化算法。主要两步:
Step1:计算物品之间的评分差的均值,记为物品间的评分偏差(两物品同时被评分):
其中, 是用户
u
对物品i
的评分, 是用户
u
对物品j
的评分。是对物品
i
评分的用户,而是对物品
i
和物品j
都评过分的用户,是对物品
i
和物品j
都评过分的用户数。
Step2:根据物品间的评分偏差和用户的历史评分,预测用户对未评分的物品的评分。
其中是用户
u
评分过的用户。
Step3:将预测评分排序,取topN对应的物品推荐给用户。
举例:
假设有100个人对物品A和物品B打分了,表示这100个人对A和B打分的平均偏差;有1000个人对物品B和物品C打分了,
表示这1000个人对C和B打分的平均偏差。现在有个新用户,对A的评分为
,对C的评分为
,则对B的评分为:
SlopeOne使用场景
该算法适用于物品更新不频繁,数量相对较稳定并且物品数目明显小于用户数的场景。依赖用户的用户行为日志和物品偏好的相关内容。
优点:
- 算法简单,易于实现,执行效率高;
- 可以发现用户潜在的兴趣爱好;
缺点:
- 依赖用户行为;
- 存在冷启动问题和稀疏性问题。