最近在學習使用阿里雲的推薦引擎時,在使用的過程中用到很多推薦算法,所以就研究了一下,這里主要介紹一種推薦算法—基於物品的協同過濾算法。
ItemCF算法不是根據物品內容的屬性計算物品之間的相似度,而是通過分析用戶的行為記錄來計算用戶的相似度。該算法認為物品A和物品B相似的依據是因為喜歡物品A的用戶也喜歡物品B。
基於物品的協同過濾算法實現步驟:
1、計算物品之間的相似度
2、根據物品的相似度和用戶的歷史行為記錄給用戶生成推薦列表
下面我們一起來看一下這兩部是如何實現的:
一、計算物品之間的相似度
通過查詢一下資料,ItemCF的物品相似度計算模型如下:
公式中|N(i)|表示喜歡物品i的用戶數,|N(j)|表示喜歡物品j的用戶數, |N(i)∩N(j)|表示同時喜歡物品i和物品j的用戶數。從上面的公式我們可以看出物品i和物品j相似是因為他們共同別很多的用戶喜歡,相似度越高表示同時喜歡他們的用戶數越多。
下面舉例講解一下相似度的計算過程:
假設用戶A對物品a,b,d有過評價,用戶B對物品b,c,e有過評價,如下圖:
A : a b d
B : b c e
C : c d
D : b c d
E : a d
根據上面用戶的行為構建:用戶——物品倒排表:例如:物品a有用戶A和E做過評價。
a : A E
b : A B D
c : B C D
d : A C D E
e : B
根據上面的倒排表我們可以構建一個相似度矩陣:
圖 1.1 計算物品的相似度
圖中最左邊的是用戶輸入的用戶行為記錄,每一行代表用戶感興趣的物品集合,然后對每個物品集合,我們將里面的物品兩兩加一,得到一個矩陣。最終將這些矩陣進行相加得到上面的C矩陣。其中Ci記錄了同時喜歡物品i和j的用戶數。這樣我們就得到了物品之間的相似度矩陣W。
二、根據物品的相似度和用戶的歷史行為記錄給用戶生成推薦列表
ItemCF通過下面的公式計算用戶u對一個物品j的興趣:
這里的N(u)代表用戶喜歡的物品的集合,S(j,k)是和物品j最相似的的k個物品的集合,wij是物品j和i的相似度,r_ui代表用戶u對物品i的興趣。該公式的含義是,和用戶歷史上最感興趣的物品月相似的物品,越有可能在用戶的推薦列表中獲得比較高的排名。
下面是查閱資料找到的一些優化方法:
(1)、用戶活躍度對物品相似度的影響
即認為活躍用戶對物品相似度的貢獻應該小於不活躍的用戶,所以增加一個IUF(Inverse User Frequence)參數來修正物品相似度的計算公式:
用這種相似度計算的ItemCF被記為ItemCF-IUF。
ItemCF-IUF在准確率和召回率兩個指標上和ItemCF相近,但它明顯提高了推薦結果的覆蓋率,降低了推薦結果的流行度,從這個意義上說,ItemCF-IUF確實改進了ItemCF的綜合性能。
(2)、物品相似度的歸一化
Karypis在研究中發現如果將ItemCF的相似度矩陣按最大值歸一化,可以提高推薦的准確度。其研究表明,如果已經得到了物品相似度矩陣w,那么可用如下公式得到歸一化之后的相似度矩陣w':
最終結果表明,歸一化的好處不僅僅在於增加推薦的准確度,它還可以提高推薦的覆蓋率和多樣性。用這種相似度計算的ItemCF被記為ItemCF-Norm。