当前位置: 首页>>机器学习>>正文


Slope One——简单而高效的协同过滤算法

在传统基于内容的推荐系统中,根据商品特性的相似性来做推荐,例如:如果你购买了Machine Learning, Tom M.Mitchell这本书,系统会给你推荐The Elements of Statistical Learning, Trevor Hastie/Robert Tibshirani/Jerome Friedman。这两本都是机器学习领域的经典书籍,系统基于机器学习这个共同的特性做了上述推荐。

协同过滤(Collaborative Filtering)旨在基于用户行为或者说兴趣的相似性进行推荐,简单来说就是,如果用户U1买了商品P1但没有买P2,但是用户U2买了商品P1且买了商品P2,那么我们可以给用户U1推荐商品P2。

常用的协同过滤算法有item-based和user-based,常用于具有user-item关系矩阵时的推荐问题。其中item-based推荐将商品表示成用户是否购买的布尔向量,即将用户作为商品的特征,如果要判断买了item1是否要买item2,可以计算item1和item2的向量的相似度,计算方法有cosine、pearson相关系数、欧氏距离等。而user-based推荐将用户表示成商品是否被购买的向量,即将商品作为用户的特征,同样计算向量相似度就可以做推荐了。

协同过滤的另外一种简单而高效的方法是Slope One,这个算法适用于用户对商品评分预测问题。先看一个非常简单的例子:

User Rating to Item 1 Rating to Item 2
U1 9.5 4.5
U2 7.0 2.0
U3 8.0 ?

已知用户U1/U2对两个商品Item1和Item2的打分以及U3对Item1的打分,问U3对商品2的打分是?

Slope One 的答案非常简介:8. 0 – ((9.5 -4.5) + (7.0 – 2.0)/2 = 3.0。文字解释就是:先计算出其他对于对Item1和Item2打分差值的均值,再用U3对Item1打分减去这个均值。

为了扩展到更普适的情形,再来看另外一个略微复杂一点的例子:

User Rating to Item 1 Rating to Item 2 Rating to Item 3
John 5.0 3.0 2.0
Mark 3.0 4.0 NULL
Lucy NULL 2.0 5.5

问题是Lucy对Item1的评分是多少?

先看其他用户对Item1跟其他Item打分差值:

John和Mark对于Item1和Item2评分差的均值为:  ((5.0 – 3.0) + (3.0 – 4.0))/2 = 0.5,再看John对于Item1和Item3评分差的均值为:(5.0 – 2.0) = 3.0。

那么Lucy对Item1的打分就是((2. 0 -(-0.5)) * 2 + (5.5 – (-3.0) * 1) / (2 + 1)  = 13.5 / 3 = 4.5。文字解释就是看其他用户对Item1和其他Item打分差的均值,然后看自己第Item1和其他Item,用跟其他Item差值做加权平均。其中Item1和Item2打分差出现了2次,Item1和Item3打分差出现了1次。

总的来说,我们只需要存储商品对之间的评分插值以及评价次数即可,这对于处理商业推荐系统中的数据稀疏问题非常有用。

 

参考:

[1] http://zh.wikipedia.org/zh-cn/Slope_one

本文由《纯净天空》出品。文章地址: https://vimsky.com/article/705.html,未经允许,请勿转载。