基於使用者的的協調過濾演算法是推薦統統最古老的演算法,簡稱usercf。該演算法的誕生一定程度上標誌著推薦系統的誕生。本文將對usercf演算法原理進行講解,並且基於movielens資料集給出實現**供大家交流學習。
找到和目標使用者興趣相似的使用者集合
找到這個集合中使用者喜歡的且目標使用者沒有聽說過的物品推薦給目標使用者。
步驟1的關鍵為計算兩個使用者之間的興趣相似度。那麼如何度量兩個使用者的興趣相似度呢,該演算法主要利用使用者行為的相似度計算興趣的相似度。給定使用者\(u\)和使用者\(v\),令\(n(u)\)表示使用者\(u\)曾經有過正反饋的物品集合,\(n(v)\)表示使用者\(v\)曾經有過正反饋的物品集合。那麼,可通過如下的\(jaccard\)公式簡單計算興趣相似度:
\[w_ = \frac
\]或者通過余弦相似度:
\[w_ = \frac}
\]下面通過表1.1的使用者行為記錄為例,舉例說明usercf計算使用者興趣相似度的例子。在該例中,使用者a對物品有過行為,使用者b對物品有過行為,利用余弦相似度公式計算使用者a和使用者b的興趣相似度為:
\[w_ = \frac \bigcap |}|| |}}=\frac}
\]表 1.1
user
item
aa,b,d
ba,c
cb,c
dc,d,e
由於對兩兩使用者都計算余弦相似度,時間複雜度太高。可以在\(n(u)\bigcap n(v)=0\)時不計算余弦相似度。為此,可以首先建立物品到使用者的倒排表,對於每個物品都儲存對該物品產生過行為的使用者列表。令稀疏矩陣\(c[u][v]=|n(u) \bigcap n(v)|\)。假設使用者u和使用者v同時屬於倒排表中k個物品對應的使用者列表,就有\(c[u][v]=k\)。從而,可以掃瞄倒排表每個物品對應的使用者列表,將使用者列表中的兩兩使用者對應的\(c[u][v]\)加1,最終得到所有使用者之間不為零\(c[u][v]\)。
\[p(u, i)=\sum_}r_}
\]其中,\(s(u,k)\)包含和使用者u興趣最接近的k個使用者,n(i)是對物品i有過行為的使用者集合,\(w_\)是使用者u和使用者v的興趣相似度,\(r_\)代表使用者v對物品i的興趣,對於單一行為的隱反饋資料,所有的\(r_=1\)。
使用\(jaccard\)公式(或者余弦相似度)計算使用者興趣度,會帶來一定的缺陷。考慮這種情況,以圖書為例,如果兩個使用者都曾買過《新華字典》,這絲毫不能說明他們興趣相似,因為絕大多數中國人小時候都買過。但是如果兩個使用者都買過《資料探勘導論》,那可以認為他們的興趣比較相似,因為只有研究資料探勘的人才會買這本書。換句話說,兩個使用者對冷門物品採取過同樣的行為更能說明他們興趣的相似度。因此,john s. breese在**中提出了如下公式,根據使用者行為計算使用者的興趣相似度:
\[w_ = \frac}}} }
\]可以看到,該公式通過\(\frac\)懲罰使用者u和使用者v共同興趣列表中熱門物品對他們相似度的影響。
作者基於movielens資料集(顯性反饋資料集)實現了該演算法,位址詳見:usercf演算法實現
usercf適用於使用者較少的場景,時效性較強且使用者個性興趣不太明顯的領域。當使用者有新行為時,它不一定能夠實時更新使用者的推薦結果。並且無法給出令使用者信服的推薦解釋。
推薦系統之基於使用者的協調過濾
在如何海量的資料時代,如何從海量的商品中選擇相關產品?在1100萬首itunes曲目中,肯定有一部分 是你特別喜愛的,那麼該如何找到它們呢?專家點評推薦 影評家 通過商品本身尋找 我喜歡披頭四的一張 所以會認為他們的另一張 也不錯 資料探勘不僅僅是用來推薦商品,或是單單給商人增加銷量,同時也能擴充套...
推薦系統 基於使用者的協調過濾
作為推薦系統 這一系列的第二篇文章,我們今天主要來聊一聊目前比較流行的一種推薦演算法 協調過濾 當然,這裡我們只講理論,並不會涉及到相關 或者相關框架的使用,在這一系列的後續文章,如果可能,我們可以將我們的所有理論知識整合一下,實踐乙個 推薦系統的 實戰。顧名思義,協同過濾就是指使用者可以齊心協力,...
基於使用者的協調推薦演算法
這個是實驗周拓展的任務。做的是基於使用者的協同過濾演算法,參考的是 集體智慧型程式設計 第一章的內容,選取的資料是moives的100k的資料。詳細可以見實驗周的實驗報告。coding utf 8 import codecs from math import sqrt 皮爾遜相關度評價 defsim...