推薦系統系列——基於用戶的協同過濾

這是一個圍繞推薦系統的系列,涵蓋實際推薦系統的演算法與工程架構。

本篇是第二篇,主要介紹基於用戶的協同過濾推薦演算法。

演算法核心思想

給定一個User-Item評分數據集和當前用戶的ID作為輸入,找出與當前用戶過去有相似偏好的其他用戶(這些用戶被稱為對等用戶或最近鄰);對當前用戶沒有見過的每個物品p,利用其近鄰對p的評分計算預測值。

這個演算法有兩個潛在假設:

  1. 如果用戶過去有相似偏好,那麼他們未來也會有相似偏好;

  2. 用戶偏好不隨時間變化;

演算法計算實例

我們通過一個實例來理解基於用戶的協同過濾演算法是如何運作的。

假設我們有如下評分資料庫:

按1-5分評分標準,Alice給「物品1」評分5分,說明他非常喜歡這個物品。在這個case中,推薦系統的任務就是確定Alice是否喜歡他從未見過的「物品5」。如果能預測出Alice非常喜歡這個物品,我們就可以將其列入Alice的推薦列表中。

Advertisements

按照基於用戶的協同過濾演算法的思想,我們首先應該尋找出那些和Alice有著類似偏好的用戶,然後用這組用戶對「物品5」的評分來預測Alice是否喜歡這個物品。

如何度量兩個用戶的相似度

這裡我們使用Pearson相關係數來度量相似度:

其中,P={p1,...,pm}代表物品集合,a,b代表待求相似度的兩個用戶。r(i,j)代表用戶i對物品j的評分,r(a)(上劃線)代表用戶a的平均評分。

按照同樣的方法,計算出Alice與用戶2、用戶3和用戶4的相似度分別為0.70、0.00和-0.79.

根據計算結果可以得出,Alice與用戶1、用戶2的歷史評分行為比較相似,因此我們說用戶1、用戶2是Alice的近鄰。

Advertisements

利用近鄰用戶預測目標用戶的評分

通過上一步計算出了近鄰,這一步就是利用近鄰用戶來預測目標用戶的評分了。

其中,N是用戶a的近鄰用戶集合。
在我們這個case當中,基於近鄰用戶1和用戶2的評分預測Alice對物品5的評分為:

4+[1/(0.85+0.7)]*[0.85*(3-2.4) + 0.70*(5-3.8)] = 4.87

根據計算結果,我們可知把物品5放到Alice的推薦列表中可能是一個很好的選擇。

總結

我們這裡的示例是很理想化的,主要目的是為了講解清楚基於用戶的協同過濾演算法的思想。實際應用中,評分數據集非常大,包含超過百萬量級的用戶和物品,所以還必須考慮計算的複雜度。另外,用戶相似度的度量、近鄰的選擇實際中還需要根據實際情況優化。

參考

《推薦系統》Dietmar Jannach等著,蔣凡譯

《推薦系統實踐》項亮著

Advertisements

你可能會喜歡