基于物品的协同过滤推荐算法_《推荐系统实践》3.基于物品的协同过滤算法
基于物品的協(xié)同過濾算法(item-based collaborative filtering,以下簡稱ItemCF)算法思想:給用戶推薦那些和他們之前喜歡的物品相似的物品。
不過,ItemCF算法并不利用物品的內容屬性計算物品之間的相似度,它主要通過分析用戶的行為記錄計算物品之間的相似度。該算法認為,物品A和物品B具有很大的相似度是因為喜歡物品A的用戶大都也喜歡物品B。
基于物品的協(xié)同過濾算法可以利用用戶的歷史行為給推薦結果提供推薦解釋,比如給用戶推薦《天龍八部》的解釋可以是因為用戶之前喜歡《射雕英雄傳》。
ItemCF算法主要分為兩步。 (1) 計算物品之間的相似度。 (2) 根據(jù)物品的相似度和用戶的歷史行為給用戶生成推薦列表。
計算物品相似度
可以用下面的公式定義物品的相似度:
這里,分母|N(i)|是喜歡物品i的用戶數(shù),而分子
是同時喜歡物品i和物品j的用戶數(shù)。因此,上述公式可以理解為喜歡物品i的用戶中有多少比例的用戶也喜歡物品j。如果物品j很熱門,很多人都喜歡, 那么
就會很大,接近1。因此,該公式會造成任何物品都會和熱門的物品有很大的相似度。為了避免推薦出熱門的物品,可以用下面的公式:這個公式懲罰了物品j的權重,因此減輕了熱門物品會和很多物品相似的可能性。
計算物品相似度時可以首先建立用戶—物品倒排表(即對每個用戶建立一個包含他喜歡的物品的列表),然后對于每個用戶,將他物品列表中的物品兩兩在共現(xiàn)矩陣C中加1。
import math from collections import defaultdict ? def item_similarity(self, trainset):# 物品相似度矩陣item_similarity_matrix = {}# 物品流行度item_popularity = {} ?for user, items in trainset.items():for item1 in items:# 構造物品相似度矩陣,計算物品共現(xiàn)次數(shù)item_similarity_matrix.setdefault(item1, defaultdict(int))for item2 in items:if item1 == item2:continueitem_similarity_matrix[item1][item2] += 1 ?# 統(tǒng)計喜歡item1的用戶數(shù)if item1 not in item_popularity:item_popularity[item1] = 0item_popularity[item1] += 1 ?# 計算最終的相似度矩陣for item1, releated_items in item_similarity_matrix.items():for item2, count in releated_items.items():self.item_similarity_matrix[item1][item2] = count / math.sqrt(item_popularity[item1] * item_popularity[item2]) return item_similarity_matrix產生推薦列表
在得到物品之間的相似度后,ItemCF通過如下公式計算用戶u對一個物品j的興趣:
這里N(u)是用戶喜歡的物品的集合,S(j,K)是和物品j最相似的K個物品的集合,
是物品j和i的相似度, 是用戶u對物品i的興趣(對于隱反饋數(shù)據(jù)集,如果用戶u對物品i有過行為,即可令 。)該公式的含義是,和用戶歷史上感興趣的物品越相似的物品,越有可能在用戶的推薦列表中獲得比較高的排名。關于物品相似度的一些改進
- 用戶活躍度對物品相似度的影響
John S. Breese在論文“Empirical Analysis of Predictive Algorithms for Collaborative Filtering ”中提出了一個稱為IUF(Inverse User Frequence),即用戶活躍度對數(shù)的倒數(shù)的參數(shù),他認為活躍用戶對物品相似度的貢獻應該小于不活躍的用戶,他提出應該增加IUF參數(shù)來修正物品相似度的計算公式:
當然,上面的公式只是對活躍用戶做了一種軟性的懲罰,但對于很多過于活躍的用戶,為了避免相似度矩陣過于稠密,我們在實際計算中一般直接忽略他的興趣列表,而不將其納入到相似度計算的數(shù)據(jù)集中。
- 物品相似度歸一化
研究發(fā)現(xiàn),如果將ItemCF的相似度矩陣按最大值歸一化,可以提高推薦的準確率。如果已經(jīng)得到了物品相似度矩陣w,那么可以用如下公式得到歸一化之后的相似度矩陣w':
歸一化的好處不僅僅在于增加推薦的準確度,它還可以提高推薦的覆蓋率和多樣性。
總結
以上是生活随笔為你收集整理的基于物品的协同过滤推荐算法_《推荐系统实践》3.基于物品的协同过滤算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Autowire异常
- 下一篇: SpringJDBC解析3-回调函数(u