天天看點

經典算法題每日演練——第六題 協同推薦SlopeOne 算法

          相信大家對如下的Category都很熟悉,很多網站都有類似如下的功能,“商品推薦”,"猜你喜歡“,在實體店中我們有導購來為我們服務,在網絡上

我們需要同樣的一種替代物,如果簡簡單單的在資料庫裡面去撈,去比較,幾乎是完成不了的,這時我們就需要一種協同推薦算法,來高效的推薦浏覽者喜

歡的商品。

經典算法題每日演練——第六題 協同推薦SlopeOne 算法
經典算法題每日演練——第六題 協同推薦SlopeOne 算法

一:概念

     SlopeOne的思想很簡單,就是用均值化的思想來掩蓋個體的打分差異,舉個例子說明一下:

經典算法題每日演練——第六題 協同推薦SlopeOne 算法

在這個圖中,系統該如何計算“王五“對”電冰箱“的打分值呢?剛才我們也說了,slopeone是采用均值化的思想,也就是:R王五 =4-{[(5-10)+(4-5)]/2}=7 。

下面我們看看多于兩項的商品,如何計算打分值。

rb = (n * (ra - R(A->B)) + m * (rc - R(C->B)))/(m+n)

注意: a,b,c 代表“商品”。

         ra 代表“商品的打分值”。

        ra->b  代表“A組到B組的平均差(均值化)”。

       m,n 代表人數。

經典算法題每日演練——第六題 協同推薦SlopeOne 算法

根據公式,我們來算一下。

r王五 = (2 * (4 - R(洗衣機->彩電)) + 2 * (10 - R(電冰箱->彩電))+ 2 * (5 - R(空調->彩電)))/(2+2+2)=6.8

是的,slopeOne就是這麼簡單,實戰效果非常不錯。

二:實作

1:定義一個評分類Rating。

2: 定義一個産品類

3:SlopeOne類

     參考了網絡上的例子,将二維矩陣做成線性表,有效的降低了空間複雜度。

經典算法題每日演練——第六題 協同推薦SlopeOne 算法

4: 測試類Program

    這裡我們灌入了userid=1000,2000,3000的這三個人,然後我們預測userID=3000這個人對 “彩電” 的打分會是多少?

經典算法題每日演練——第六題 協同推薦SlopeOne 算法