推薦演算法 ItemCF,基於物品的協同過濾演算法

2021-07-14 21:17:21 字數 2277 閱讀 3534



標籤: itemcf

基於使用者的協同過濾演算法

2015-03-09 15:11

4144人閱讀收藏

舉報

algorithm & data structure(12)

作者同類文章x

itemcf:itemcollaborationfilter,基於物品的協同過濾

比如,使用者a之前買過《資料探勘導論》,該演算法會根據此行為給你推薦《機器學習》,但是itemcf演算法並不利用物品的內容屬性計算物品之間的相似度,它主要通過分析使用者的行為記錄計算物品之間的相似度。

==>該演算法認為,物品a和物品b具有很大的相似度是因為喜歡物品a的使用者大都也喜歡物品b。

基於物品的協同過濾演算法主要分為兩步:

一、計算物品之間的相似度;

二、根據物品的相似度和使用者的歷史行為給使用者生成推薦列表;

下面分別來看這兩步如何計算:

一、計算物品之間的相似度:

我們使用下面的公式定義物品的相似度:

其中,|n(i)|是喜歡物品i的使用者數,|n(j)|是喜歡物品j的使用者數,|n(i)&n(j)|是同時喜歡物品i和物品j的使用者數。

從上面的定義看出,在協同過濾中兩個物品產生相似度是因為它們共同被很多使用者喜歡,兩個物品相似度越高,說明這兩個物品共同被很多人喜歡。

這裡面蘊含著乙個假設:就是假設每個使用者的興趣都侷限在某幾個方面,因此如果兩個物品屬於乙個使用者的興趣列表,那麼這兩個物品可能就屬於有限的幾個領域,而如果兩個物品屬於很多使用者的興趣列表,那麼它們就可能屬於同乙個領域,因而有很大的相似度。

舉例,使用者a對物品a、b、d有過行為,使用者b對物品b、c、e有過行為,等等;

依此構建使用者——物品倒排表:物品a被使用者a、e有過行為,等等;

建立物品相似度矩陣c:

在得到物品之間的相似度後,進入第二步。

二、根據物品的相似度和使用者的歷史行為給使用者生成推薦列表:

itemcf通過如下公式計算使用者u對乙個物品j的興趣:

其中,puj表示使用者u對物品j的興趣,n(u)表示使用者喜歡的物品集合(i是該使用者喜歡的某乙個物品),s(i,k)表示和物品i最相似的k個物品集合(j是這個集合中的某乙個物品),wji表示物品j和物品i的相似度,rui表示使用者u對物品i的興趣(這裡簡化rui都等於1)。

該公式的含義是:和使用者歷史上感興趣的物品越相似的物品,越有可能在使用者的推薦列表中獲得比較高的排名。

下面是乙個書中的例子,幫助理解itemcf過程:

至此,基礎的itemcf演算法小結完畢。

下面是書中提到的幾個優化方法:

(1)、使用者活躍度對物品相似度的影響

即認為活躍使用者對物品相似度的貢獻應該小於不活躍的使用者,所以增加乙個iuf(inverse user frequence)引數來修正物品相似度的計算公式:

用這種相似度計算的itemcf被記為itemcf-iuf。

itemcf-iuf在準確率和召回率兩個指標上和itemcf相近,但它明顯提高了推薦結果的覆蓋率,降低了推薦結果的流行度,從這個意義上說,itemcf-iuf確實改進了itemcf的綜合性能。

(2)、物品相似度的歸一化

karypis在研究中發現如果將itemcf的相似度矩陣按最大值歸一化,可以提高推薦的準確度。其研究表明,如果已經得到了物品相似度矩陣w,那麼可用如下公式得到歸一化之後的相似度矩陣w':

最終結果表明,歸一化的好處不僅僅在於增加推薦的準確度,它還可以提高推薦的覆蓋率和多樣性。

用這種相似度計算的itemcf被記為itemcf-norm。

以上內容參考自

《推薦系統實踐》

python推薦演算法itemCF基於物品的協同過濾

itemcf demo python 3.7 import numpy as np import math test data users u1 u2 u3 item like list a,b,c a,b,c,e,f a,e 單個商品喜歡人數 def check 1item item return...

基於物品的協同過濾演算法 ItemCF

余弦相似度公式 其中 共現矩陣,記錄了同時愛好 i 和 j 的數量 根據余弦相似度公式計算相似度 初始化使用者評分資料 def inituserscore self user score dict b c d return user score dict 計算item之間的相似度 def items...

基於物品 使用者 的推薦演算法

用mapreduce計算框架實現了3個小demo wordcount 基於物品的推薦演算法 itemcf 和基於使用者的推薦演算法 usercf 連線 map輸入 key longwritable型別,每一行的起始偏移量 value text型別 userid,itemid,score map輸出 ...