資源簡介
《推薦系統實踐》 程序實現 —— 2.4.1 基于用戶的協同過濾算法
代碼片段和文件信息
import?math
train?=?dict();
train?=?{‘A‘:{‘a‘:1‘b‘:1‘d‘:1}
?‘B‘:{‘a‘:1‘c‘:1}
?‘C‘:{‘b‘:1‘e‘:1}
?‘D‘:{‘c‘:1‘d‘:1‘e‘:1}
}#此處物品a、b、c、d、e后面對應的值1,是用戶對物品感興趣的程度。比如‘A‘:{‘a‘:1},是用戶A對物品a感興趣的程度。
?#按理說感興趣的程度應該是不同的數值,但此處,因為使用的是單一行為的隱反饋數據,所以所有的都定為1了。這里的感興趣程度即書中p47頁公式(用于計算用戶u對物品i的感興趣程度)中的rvi,可參考其介紹。
#1、build?inverse?table?for?item_users:通過用戶-物品列表,建立物品-用戶倒排表
item_users?=?dict()#存儲物品-用戶倒排表
for?uitems?in?train.items():
print(u‘corresponds?to‘items)
for?i?in?items.keys():#遍歷每一個用戶的物品列表。
print(i)
if?i?not?in?item_users:
item_users[i]?=?set()
item_users[i].add(u)#物品列表中的物品i,有用戶u訪問過
print(‘輸出item_users[]‘)
for?uitems?in?item_users.items():
print(u‘corresponds?to‘items)
print(‘‘)
#2、calculate?co-rated?items?between?users?:計算兩個用戶共同訪問過的物品數,建立用戶相似度矩陣C,C[u][v]=x,即表示uv共同訪問過的物品有x個。?
C?=?dict()#C[][]是一個嵌套的二維字典,eg:C?=?{‘A‘:{‘C‘:1‘B‘:1‘D‘:1}}
N?=?dict()#N[]統計用戶有過行為的物品數,最終N[A]=3N[B]=2N[C]=2N[D]=3
for?i??users?in?item_users.items():
print(i?‘corresponds?to?‘?users)?#示例:(‘a‘?‘corresponds?to?‘?set([‘A‘?‘B‘]))
for?u?in?users:#u遍歷一遍物品i的users列表
print(u?‘u?in?users‘)
if?u?not?in?N.keys():
N[u]?=?0
N[u]?+=?1?#統計用戶u有過行為的物品數
????????
for?v?in?users:#v遍歷一遍物品i的users列表
print(v?‘v?in?uers‘)
if?u?==?v:
continue
#注意:二維“字典”新添一個key-value對時,需要判斷key是否已經存在了
if?u?not?in?C.keys():
- 上一篇:UNITY3D 切分圖集 可遞歸
- 下一篇:RSA算法的純Python實現源碼
評論
共有 條評論