基於Spark實現推薦算法-2:基於用戶的協同過濾(理論篇)

基於用戶的協同過濾

基於用戶的協同過濾,即User-Based CF (User-Based Collaborative Filtering),是基於一個這樣的假設“跟你愛好相同的人喜歡的物品,你很可能也喜歡”,所以User-Based CF主要的任務就是找出用戶的最近鄰居,從而根據最近鄰居的喜好做出未知項的評分預測。
User-Based CF算法可以分爲4個步驟:數據表示、最近鄰查詢、評分預測、推薦結果產生。

1.數據表示

User-Based CF使用的用戶—項目數據可以表示爲二維矩陣。以用戶對項目的評分數據爲例,評分數據可以用如下方法表示,

  • 用戶評分數據表
Item/User User 1 User k User n
Item 1 R1,1
Item j Rj,k
Item m Rm,n

其中每一行代表物品所獲得的評分。以Item j爲例,Rj,k代表用戶k給物品j的評分,但並不是所有用戶都會對Item j進行評分,所以Rj,k可能存在也可能不存在。這裏設用戶數爲n,物品數目爲m,可以將數據轉換爲評分值組成的二維矩陣R,則R是維度爲(m×n)的評分矩陣。

2.最近鄰查詢

所謂“最近鄰居”是指與當前用戶最相似的其他若干用戶,爲了防止單個用戶評分對推薦結果影響過大,導致偏差,通常取N(N爲大於1的整數)個相似用戶的數據。沒有度量就沒有比較,所以需要某種方法度量用戶間的相似程度,這裏相似程度簡稱爲相似度。
相似度的計算方法較多,以餘弦相似度計算爲例說明。餘弦相似度(Cosine-based Similarity)是用兩個向量間夾角的餘弦值來衡量相似性。若要計算用戶間的相似度,也就是要計算上一步中矩陣R的列向量間的相似度,取User X和User Y的向量分別爲如下公式所示,

x=(R1,x,,Rm,x)

y=(R1,y,,Rm,y)

那麼User X與User Y間的餘弦相似度爲,

sim(X,Y)=cos(x,y)=xyxy

其中xy 表示向量間的內積,x 是向量 x ⃗$的模,sim(X,Y)就是相似度的值。依次計算當前用戶與其他所有用戶的相似度,選取相似度最大的前K個用戶作爲該用戶的最近鄰居集合。

3.評分預測

評分預測的方法也有多種,常用的是加權求和的方法計算預測值。將用戶u的最近鄰居用戶對物品i的打分進行加權求和,權值爲各個最近鄰居用戶與用戶u的相似度,然後對加權求和的結果求平均,計算得到用戶u對物品i的預測打分,公式如下:

Pu,i=nNSu,nRn,inN(|Su,n|)

N代表用戶u的最近鄰居用戶集合,n是屬於N中的一個用戶, Su,n 表示用戶u和用戶n的相似度,Rn,i 表示用戶n對物品i的評分。根據該公式逐個計算出用戶u未評分的所有物品的預測評分,得到預測評分集合。
推薦結果產生
從上一步得到的預測評分集合中,選出評分最高的若干個物品作爲推薦物品集,也就是最終的推薦結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章