當前位置: 首頁>>機器學習>>正文


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/zh-tw/article/705.html,未經允許,請勿轉載。