協同過濾之Slope One演算法

2021-06-04 16:41:33 字數 1494 閱讀 4161

純筆記,直接從維基百科上翻譯過來的:

slope-one演算法是基於評分的item-based演算法中最簡單的一種了,它的思想非常簡單,但在很多場合卻有很好的效果。但是slope one只適用於有評分的情況,對於二值評分,如商品的有無購買,這種演算法是不適用的。

通常的item-based演算法是基於使用者的評分歷史及其他使用者對item的評分來**使用者對item的評分的。舉個例子,如果乙個使用者給重塑的**評了5分,那麼他會不會對pk14同樣也評5分呢?

處理這種問題時,我們通常是根據使用者的歷史評分記錄,使用線性回歸 f(x) = ax + b來擬合。因此,如果item的數量為1000,那麼可能導致有1000000種回歸方式,2000000個回歸變數。這種方法會造成嚴重的過度擬合(因為回歸是基於使用者自身的),除非我們選擇那些許多使用者有共同評分的item來進行計算(即協同過濾)。

另外一種方法是,我們把回歸直線簡化成 f(x) = x + b。這樣就只剩乙個回歸變數了(slope one)。

slope one演算法解釋:

假設有a,b兩位使用者,他們對item i,j的評分如下:

使用者a對i和j均有評分,使用者b只對i有評分,現在需要**使用者b對j的評分。

使用slope-one演算法,結果很簡單:使用者a對i和j的評分差為:1.5 - 1 = 0.5,因此使用者b對j的評分 = 2 + 0.5 = 2.5

再看另乙個例子:

customer

item 1

item 2

item 3a5

32b3

4?c?

25在這個例子中,使用者a和b對item1,2的評分平均差為: (2 + (-1)) / 2 = 0.5,也就是說,item 1平均獲得比item 2高0.5的評分。類似地,item 3和item 1的評分差為3。因此,假如我們根據c對item 2的評分歷史來**他對item 1的評分,結果為2 + 0.5 = 2.5。如果我們用她對item 3的評分來**item 1,則結果為5+3=8。

在這種情況下,使用者對多個item都有評分歷史,我們只需要簡單地根據對同乙個item共同評分的使用者數做乙個加權平均即可。這裡總共有2位使用者同時對item1和item2做過評分,有一位使用者同時對item2和item3做過評分,因此c對item 1的評分為:

(2 * 2.5 + 1 * 8) / (2 + 1) = 4.33

給定n個item,slope one在實現上只需要計算和儲存item間的平均分差以及共同評分的使用者數,總共有n*n對item。

演算法複雜度:

若有n個item,m個使用者,以及n個評分,則每兩個item之間的平均分差,需要n*(n-1)/2的單位儲存,以及最多m*n*n次計算。若使用者最多對y個item有評分,則計算平均分差的時間複雜度為 n*n + m*y*y。若乙個使用者有x個評分,則**一次評分需要x次計算,**使用者的所有評分需要(n-x)*x次計算。

一種精簡空間的方法是劃分資料(個人理解是,將評分資料根據item進行儲存)或使用稀疏儲存,即忽略沒有共同評分的資料。

Slope One 協同過濾 推薦演算法

slope one 是乙個簡單,效率較高的協同過濾推薦演算法。slope one 演算法是由 daniel lemire 教授在 2005 年提出.距今已經10年。基於如下五點被設計出來 1.演算法容易實現和維護 2.對新的評分應該立即給予響應 3.查詢速度要快 雖然可能以犧牲儲存量為代價 4.對新...

推薦系統(協同過濾,slope one)

協同過濾 基於使用者 user cf 基於內容 item cf slop one 關聯規則 apriori 演算法,啤酒與尿布 2.slope one 演算法 slope one 演算法是基於不同物品之間的評分差的線性演算法,使用者對物品評分的個性化演算法。slope one 演算法是由daniel...

協同過濾演算法

3種形式的協同過濾 collaborative filtering 演算法 1 user based 相同 相似 使用者的喜好相同 2 item based 能夠引起使用者興趣的專案,必定與其之前評分高的專案相似 3 model based 先用歷史資料得到乙個模型,再用此模型進行 參考 這個位址是...