僅供學習使用
書本的第四章,推薦系統的基礎算法
要花一些時間理解公式了。
4.1 基於內容的推薦算法
4.1.1 基於內容的推薦算法基本流程
- 分析內容,提取特徵。屬性、標籤等
- 計算用戶偏好
- 召回
- 排序
4.1.2 基於內容推薦的特徵提取
- 詞頻
- TFIDF
4.2 基於協同的推薦算法
from 1992
4.2.1 基於物品的協同算法
核心思想:給用戶推薦那些,和他們之前購買的物品相似的物品
-
假設有以下數據,用戶購買記錄
-
爲每一個用戶構建購買矩陣,展示物品的共現次數
-
將所有用戶的物品購買共現次數累加起來,形成共現次數矩陣C
-
計算矩陣N,每一個物品被購買的次數
物品 | 被購買次數 |
---|---|
=2 | |
=4 | |
=1 | |
=2 | |
=1 |
- 計算物品的相似度矩陣W
得到:
- 以上是基於共同喜歡物品的用戶列表計算
- 還可以考慮基於餘弦的相似度計算
- 對於熱門物品,可以加入懲罰機制
## ItemCF算法
import math
def ItemSimilarity(train):
C = dict() #
N = dict() # 書本被購買用戶數
for u, item in train.items():
for i in item.keys():
if i not in N.keys():
N[i] = 0
N[i] += 1
for j in item.keys():
if i == j:
continue
if i not in C.keys():
C[i] = dict()
if j not in C[i].keys():
C[i][j] = 0
C[i][j] += 1
W = dict()
for i, related_items in C.items():
if i not in W.keys():
W[i] = dict()
for j, cij in related_items.items():
W[i][j] = cij / math.sqrt(N[i] * N[j])
return W
train_data = {
'A': {'i1': 1, 'i2': 1, 'i4': 1},
'B': {'i1': 1, 'i4': 1},
'C': {'i1': 1, 'i2': 1, 'i5': 1},
'D': {'i2': 1, 'i3': 1},
'E': {'i3': 1, 'i5': 1},
'F': {'i2': 1, 'i4': 1}
}
W = ItemSimilarity(train_data)
print(W['i1'])
print(W['i2'])
print(W['i3'])
print(W['i4'])
print(W['i5'])
## ItemCF-餘弦算法
import math
def ItemSimilarity_cos(train):
C = dict() #
N = dict() #
for u, item in train.items():
for i in item.keys():
if i not in N.keys():
N[i] = 0
N[i] += item[i] * item[i]
for j in item.keys():
if i == j:
continue
if i not in C.keys():
C[i] = dict()
if j not in C[i].keys():
C[i][j] = 0
C[i][j] += item[i] * item[j]
W = dict()
for i, related_items in C.items():
if i not in W.keys():
W[i] = dict()
for j, cij in related_items.items():
W[i][j] = cij / (math.sqrt(N[i]) * math.sqrt(N[j]))
return W
train_data = {
'A': {'i1': 1, 'i2': 1, 'i4': 1},
'B': {'i1': 1, 'i4': 1},
'C': {'i1': 1, 'i2': 1, 'i5': 1},
'D': {'i2': 1, 'i3': 1},
'E': {'i3': 1, 'i5': 1},
'F': {'i2': 1, 'i4': 1}
}
W = ItemSimilarity_cos(train_data)
print(W['i1'])
print(W['i2'])
print(W['i3'])
print(W['i4'])
print(W['i5'])
餘弦計算公式:
總結:
學習了基於物品的協同過濾算法。
實現步驟:
- 給每個用戶,計算相同物品的共現次數矩陣
- 合併所有用戶的物品共現次數矩陣,形成C
- 統計每個商品的出現次數,形成矩陣N
- 計算物品相似度矩陣W, 計算公式: