Slope One 演算法

來源:互聯網
上載者:User

 在做的一個項目中需要用到推薦演算法, 在網上查了一下. Beyond Search介紹了一個協同過濾演算法(Collaborative Filtering) : SlopeOne;和其它類似演算法相比, 它的最大優點在於演算法很簡單, 易於實現, 執行效率高, 同時推薦的準確性相對很高;

基本概念
SlopeOne的基本概念很簡單, 例子1, 使用者X, Y和A都對Item1打了分. 同時使用者X,Y還對Item2打了分, 使用者A對Item2可能會打多少分呢?

User Rating to Item 1 Rating to Item 2
X 5 3
Y 4 3
A 4 ?

根據SlopeOne演算法, 應該是:4 - ((5-3) + (4-2))/2 = 2.5.
解釋一下.
使用者X對Item1的rating是5, 對Item2的rating是3, 那麼他可能認為Item2應該比Item1少兩分.
同時使用者Y認為Item2應該比Item1少1分.
據此我們知道所有對Item1和Item2都打了分的使用者認為Item2會比Item1平均少1.5分.
所以我們有理由推薦使用者A可能會對Item2打(4-1.5)=2.5分;

很簡單是不是? 找到對Item1和Item2都打過分的使用者, 算出rating差的平均值, 這樣我們就能推測出對Item1打過分的使用者A對Item2的可能Rating, 並據此向A使用者推薦新項目.
這裡我們能看出SlopeOne演算法的一個很大的優點, 在只有很少的資料時候也能得到一個相對準確的推薦, 這一點可以解決Cold Start的問題.

加權演算法
接下來我們看看加權演算法(Weighted SlopeOne). 如果有100個使用者對Item1和Item2都打過分, 有1000個使用者對Item3和Item2也打過分. 顯然這兩個rating差的權重是不一樣的. 因此我們的計算方法是
(100*(Rating 1 to 2) + 1000(Rating 3 to 2)) / (100 + 1000)

上面討論的是使用者只對項目的喜好程度打分.還有一種情況下使用者也可以對項目的厭惡程度打分. 這時可以使用雙極SlopeOne演算法(BI-Polar SlopeOne). 我還在研究這篇論文,搞懂了再寫吧, 呵呵;

參考資料
Slope One 演算法是由 Daniel Lemire 教授在 2005 年提出. 這裡可以找到論文原文(PDF);上面也列出了幾個參考實現. 現在有Python, Java和Erlang, 還沒有C#.
這篇: tutorial about how to implement Slope One in Python是一個很好的怎麼實現SlopeOne並使用它來推薦的例子. 但是現在好像不能訪問了 :-(  參考這篇文章, 我會在下一篇用C#代碼講解怎麼實現Weighted SlopeOne;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.