一文搞懂基於用戶的協同過濾推薦算法

        本文針對無上下文信息的隱性反饋數據集(每一條行爲記錄僅僅包含用戶ID和物品ID),介紹基於用戶的協同過濾算法原理。
        基於用戶的協同過濾推薦算法本質:找到和待推薦用戶相似的用戶羣,推進該用戶羣感興趣且待推薦用戶沒購買過的物品。例如下圖中, 用戶a購買過物品A、C,用戶c購買過物品A、C、D ,則用戶a和用戶c比較相似,可以考慮把物品D推薦給用戶a。
在這裏插入圖片描述
基本步驟

  1. 找到和待推薦用戶相似的用戶羣;
  2. 找到這個用戶羣中用戶感興趣的,且待推薦用戶沒購買過的物品。

爲便於理解,本文後面示例的計算中使用下面數據: 第一列爲索引,userId是用戶標識,itemsId表是用戶購買過的物品ID。
在這裏插入圖片描述

1. 用戶相似度計算

        給定用戶uu和用戶vv,令N(u)N(u)表示用戶uu點擊過的物品集合,令N(v)N(v)爲用戶vv點擊過的物品集合

餘弦相似度
Wu,v=N(u)N(v)N(u)N(v) W_{u,v} = \frac{|N(u) \bigcap N(v)|} {\sqrt{|N(u)| | N(v)|}}         其中|*|表示取模,即物品的個數。

Jaccard公式
Wu,v=N(u)N(v)N(u)N(v) W_{u,v} = \frac{|N(u) \bigcap N(v)|} {|N(u) \bigcup N(v)|}
【例】根據上述數據,生成每個用戶購買過的商品列表
在這裏插入圖片描述
        可據此計算用戶相似度,例如計算用戶A和B的餘弦相似度
WA,B={1,2,5}{1,3,4}{1,2,5}{1,3,4}=13 W_{A,B} = \frac{| \{1,2,5\} \bigcap \{1,3,4\} |} {\sqrt{| \{1,2,5\}| | \{1,3,4\} |}} = \frac{1} {3}
        上面公式中需要對任意兩個用戶計算相似度,這種方法的時間複雜度是O(U2)O(U^2),其中UU標識用戶數。當用戶數量大時,計算起來會很費時。其實,並不是所有用戶購買過的物品都有交集,即存在N(u)N(v)=0|N(u) \bigcap N(v)|=0。因此,可以先計算出N(u)N(v)0|N(u) \bigcap N(v)| \neq 0的用戶對(u,v)(u,v),然後再除以相似度中的分母得到用戶的相似度矩陣。

用戶相似度計算的步驟如下:

  1. 建立物品到用戶的倒排表,對於每個物品,保存購買過該物品的用戶列表;
            【例】生成商品到用戶的倒排表
    在這裏插入圖片描述
  2. 初始化用戶相似度矩陣WWUUU*U維度的全零矩陣,遍歷倒排表,對每個物品對應的用戶列表求2個元素的排列,然後將每個排列值作爲WW的索引進行加1。(例如物品I對應的用戶列表爲[a,b],則排列爲{(a,b)},更新W[a][b]=W[a][b]+1W[a][b]=W[a][b]+1和$W[b][a]=W[b][a]+1W[b][a]=W[b][a]+1
            【例】根據倒排表生成用戶間相同商品購買量統計矩陣
    在這裏插入圖片描述
  3. 步驟2執行結束後,得到的是每個用戶與其他用戶購買相同商品的個數,即相似度的分子,要計算相似度,還需要處於分母。以餘弦相似度爲例,遍歷WW的下三角矩陣(或是上三角矩陣),計算simu,v=W[u][v]/N(u)N(v)sim_{u,v}=W[u][v] / \sqrt{|N(u)||N(v)|},其中u,vu,vWW的索引。更新W[u][v]=W[v][u]=simu,vW[u][v] = W[v][u] = sim_{u,v}
            【例】 除以計算相似度的分母,得到相似度矩陣
    在這裏插入圖片描述

2. 生成推薦列表

根據用戶相似度,計算待推薦用戶uu對與其最相似的KK個用戶購買過商品ii的感興趣程度:
p(u,i)=vS(u.K)N(i)Wu,vrv,i p(u,i) = \sum_{v \in S(u.K) \bigcap N(i)}W_{u,v}r_{v,i} 其中,S(u.K)S(u.K)爲和用戶uu興趣最接近的KK個用戶,rv,ir_{v,i}代表用戶對物品ii的興趣,因爲只是用了行爲數據,所以rv,i=1r_{v,i}=1.
        【例】生成推薦列表
在這裏插入圖片描述

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