推薦系統(一)最通俗易懂的協同過濾算法(CF)

協同過濾算法是典型的基於領域的算法,具體來說協同過濾算法分爲兩種,基於用戶的協同過濾算法和基於物品的協同過濾算法。

一.基於用戶的協同過濾算法

算法步驟:

1.找到和目標用戶興趣相似的用戶集合
2.找到這個用戶集合中用戶喜歡的,而目標用戶沒用點擊過的物品推薦給目標用戶

所以針對這個算法首先一個問題是如何找到和目標用戶興趣相似的用戶集合。

用戶相似度衡量指標

我們通過設定一個指標,來衡量其它用戶和目標用戶之間的相似性,這個指標一般可以是Jaccard或者
餘弦相似度。
利用Jaccard計算相似度:在這裏插入圖片描述

利用餘弦相似度計算相似度:在這裏插入圖片描述

其中,N(u)爲用戶u所喜歡的商品,N(v)爲用戶v所喜歡的商品。
利用這兩個度量,我們可以計算任意兩個用戶之間的相似性。

算法具體實現

第一步,我們需要建立一個物品-用戶倒排表
在這裏插入圖片描述
小寫字母爲物品,大寫字母爲用戶,表示喜歡某一個物品的用戶有哪些,比如第一行的含義爲:喜歡a物品的用戶有A和B

第二步,根據第一步計算出的物品-用戶倒排表,我們可以計算出一個用戶相似度的矩陣在這裏插入圖片描述
利用這個矩陣,我們可以知道所有用戶之間的相似度。

第三步,我們可以根據以下公式計算出用戶u對物品i的興趣程度
在這裏插入圖片描述

用戶相似度度量指標優化

對於某些物品,是很多用戶都會喜歡的,所以計算用戶相似度的時候,不應該把這些極爲熱門的物品考慮進去,所以我們對計算相似度的指標進行優化,下面以預先相似度優化爲例。
在這裏插入圖片描述

參數K對於算法度量指標的影響

K的含義是找到和目標用戶最相似的K個用戶
1.準確率和召回率
對於這兩個指標來說,k的影響不是線性的,一般來說隨K增大,準確率和召回率會有提升,但是當K大到一定程度後,可能又會出現下降。
2.流行度
一般來說,K越大,流行度會越高,在這裏可以理解,當K大到爲所有用戶時,就是給目標用戶推薦最熱門的內容。
3.覆蓋率
一般來說,K越大,覆蓋率會越低,因爲K增大,流行度增大,會導致只推薦熱門內容,所以覆蓋率就自然下降了。

二.基於物品的協同過濾算法

算法步驟:

1.計算物品之間的相似度
2.根據物品的相似度和用戶的歷史行爲給用戶生成推薦列表

物品相似度的度量


N(i)爲喜歡物品i的用戶,N(j)爲喜歡物品j的用戶。
這個度量可以理解爲同時喜歡兩個物品的用戶佔喜歡物品i用戶的百分比。
但這裏有一個問題就是,如果物品j非常熱門,很多人都喜歡,那麼無論N(i)爲多少,wij都會接近於1.所以作爲改進就有了下面的度量公式:在這裏插入圖片描述

算法具體實現

首先,計算出用戶-物品倒排表
再利用用戶-物品倒排表來計算物品之間的相似度
最後,利用如下公式計算用戶u對於物品j的興趣程度
在這裏插入圖片描述

物品相似度的度量優化

由於某些用戶可能會對大多數物品都感興趣,所以我們必須減少這類用戶對於物品相似度計算的影響。
在這裏插入圖片描述

參數K對於算法度量指標的影響

這裏k的含義爲,用戶所感興趣的k個物品。利用這k個物品來找相似物品,再推薦給用戶。
1.準確率和召回率
這裏和基於用戶的算法相同,k不對這兩個指標產生完全正相關或負相關的影響
2.流行度
這裏和基於用戶的算法不同,k不對這個指標產生完全正相關或負相關的影響
3.覆蓋率
這裏和基於用戶的算法相同,K的增加都會減少覆蓋率

三.UserCF和ItemCF比較

1.特點
UserCF的推薦結果着重於反應和用戶興趣相似的小羣體的熱點,而ItemCF的推薦結果着重於維護用戶的歷史興趣。換句話說UserCF的推薦更加社會化,而ItemCF的推薦更加個性化。
2.可解釋性
ItemCF的可解釋性比較強
3.存儲空間的角度
UserCF適用於用戶較少的場合,因爲用戶多的話維護用戶相似度矩陣會消耗很大。ItemCF則正相反。
4.實時性的角度
如果物品更新的很快,如新聞,那麼最好使用UserCF,因爲如果使用ItemCF需要很快的更新物品相似度矩陣,技術上難以實現。

參考《推薦系統實踐》( 項亮)

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