什么是協同過濾協同過濾推薦(Collaborative Filtering recommendation)是在信息過濾和信息系 統中正迅速成為一項很受歡迎的技術。與傳統的基于內容過濾直接分析內容進行 推薦不同,協同過濾分析用戶興趣,在用戶群中找到指定用戶的相似(興趣)用 戶,綜合這些相似用戶對某一信息的評價,形成系統對該指定用戶對此信息的喜 好程度預測。 協同過濾是迄今為止最成功的推薦系統技術,被應用在很多成功的推薦系統中。 電子商務推薦系統可根據其他用戶的評論信息,采用協同過濾技術給目標用戶推 薦商品。 協同過濾算法協同過濾算法主要分為基于啟發式和基于模型式兩種。 其中,基于啟發的協同過濾算法,又可以分為基于用戶的協同過濾算法 (User-Based)和基于項目的協同過濾算法(Item-Based)。 ? 啟發式協同過濾算法主要包含 3 個步驟: 1)收集用戶偏好信息 2)尋找相似的商品或者用戶 3)產生推薦 一、基于用戶的協同過濾算法基于用戶的協同過濾算法主要分為兩步: (1)找到與目標用戶興趣相似的用戶集合 (2)找到這個集合中用戶喜歡的、并且目標用戶沒有聽說過的物品推薦給目標用戶 1.相似度的計算方法皮爾遜相關系數:  其中,i 表示項,例如商品;Iu 表示用戶 u 評價的項集;Iv 表示用戶 v 評價的項 集;ru,i 表示用戶 u 對項 i 的評分;rv,i 表示用戶 v 對項 i 的評分;表示用戶 u 的平均評分;表示用戶 v 的平均評分。 余弦相似度  2.計算用戶 u 對未評分商品的預測分值首先根據上一步中 的相似度計算,尋找用戶 u 的鄰居集 N∈U,其中 N 表示鄰居集,U 表示用戶集。 然后,結合用戶評分數據集,預測用戶 u 對項 i 的評分,計算公式如下所示:  s(u,u’)表示用戶 u 和用戶 u’的相似度。 3.通過例子理解假設有如下電子商務評分數據集,預測用戶 C 對商品 4 的評分。  表中?表示評分未知。根據基于用戶的協同過濾算法步驟,計算用戶 C 對商品 4 的評分,其步驟如下所示。 (1)尋找用戶 C 的鄰居 從數據集中可以發現,只有用戶 A 和用戶 D 對商品 4 評過分,因此候選鄰居只 有 2 個,分別為用戶 A 和用戶 D。用戶 A 的平均評分為 4,用戶 C 的平均評分為 3.667,用戶 D 的平均評分為3  根據皮爾遜相關系數公式: 紅色區域計算 C 用戶與 A 用戶,用戶 C 和用戶 A 的相似度為:
 藍色區域計算 C 用戶與 D 用戶的相似度為:  (2)預測用戶 C 對商品 4 的評分 根據上述評分預測公式,計算用戶 C 對商品 4 的評分,如下所示: 
二、基于項目的協同過濾基于物品的協同過濾算法主要分為兩步: (1)計算物品之間的相似度,通過共現矩陣實現 (2)根據物品的相似度和用戶的歷史行為給用戶生成推薦列表 1.相似度計算方法 分母|N(i)]|是喜歡物品 i 的用戶數,|N(i)∩N(j)|是同時喜歡物品 i 和 j 的用戶 計算物品相似度首先建立用戶-物品倒排表,根據矩陣計算每兩個物品之間的相似度 wij。W[i][j]記錄了同時喜歡物品i和物品j的用戶數。  得到物品之間的相似度后,可以根據如下公式計算用戶 u 對于物品 j 的興趣:  N(u)是用戶喜歡的物品的集合,S(j,K)是和物品 j 最相似的 K 個物品的集合, wji 是物品 j 和 i 的相似度,rui 是用戶 u 對物品 i 的興趣。 i 的相似度,rui 是用戶 u 對物品 i 的興趣。(對于隱反饋數據集, 如果用戶 u 對物品 i 有過行為,即可令 rui=1。)該公式的含義是,和用戶歷史 上感興趣的物品越相似的物品,越有可能在用戶的推薦列表中獲得比較高的排名。 該公式的實現代碼如下所示: def Recommendation(train, user_id, W, K): rank = dict() ru = train[user_id] for i,pi in ru.items(): for j, wj in sorted(W[i].items(), key=itemgetter(1), reverse=True)[0:K]: if j in ru: continue rank[j] = pi * wj return rank
2.通過例子理解:現有用戶的訪問的記錄如下圖所示:  他的共現矩陣為:  通過公式計算相似度:  以此類推得到相似度的共現矩陣  此時若有新用戶 E,訪問的 a,b,d 三個物品,那么可以看做向量 P:   T為物品的共現矩陣,P為新用戶對已有產品的向量,得到的 P`為新用戶對每個產品的興趣度。 此時得到了對于用戶 E,c 和 e 兩個物品的興趣度是相同的。 理解公式 i∈N(u)∩S(j,K) 對于用戶 E,已經訪問了 a,b,d,那么,N(u)={a,b,d};還有兩個未訪問物品 c,e, 那么 j={c,e}; 當 j=c 時,對于和物品 j 最相似的 K 個物品的集合為{a,d,e},那么 S(j,K)={a,d,e}; 得出N(u)∩S(j,K)={a,d},如下圖所示:  再來看矩陣相乘中的 c 行,乘以 P,實際上就是上述 N(u)∩S(j,K)={a,d}的相似度求和  同理,當 j=e 時,對于和物品 j 最相似的 K 個物品的集合為{b,c,d},那么 S(j,K)={b,c,d};得出 N(u)∩S(j,K)={b,d};如下圖所示:  再來看矩陣相乘中的 e 行,乘以 P,實際上就是上述 N(u)∩S(j,K)={b,d}的相似度求和。  來源:https://www./content-4-832751.html
|