1. 程式人生 > >《推薦系統實踐》項亮 程式實現

《推薦系統實踐》項亮 程式實現

本文為筆者在學習《推薦系統實踐》一書時,對書中程式進行的實踐,僅作為學習參考,如有可以改進之處,也還請各位朋友給予指教,非常感謝。 在查詢本文中,關於原書某頁的演算法實現時,可以直接Crtl+F,輸入原書頁碼查詢。未新增的程式實現會在之後陸續補上。

2.4 基於鄰域的演算法 2.4.1 基於使用者的協同過濾演算法 1.基礎演算法 p45 利用餘弦相似度計算使用者集中兩兩使用者的相似度

p46 建立物品-使用者的倒排表

train = dict();
train = {'A':['a','b','d'],'B':['a','c'],'C':['b','e'],'D':['c','d','e']} // 注意,此處與書中略有不同,為方便理解,以列表表示使用者有過行為的物品。書中採用的train的結構是train = {'A':{'a':__,'b':___,'d':___},'B':{ },'C':{ },'D':{ }}。

item_users = dict()
for u,items in train.items():
	//print(u,'corresponds to',items)
	for i in items:
		//print(i)
		if i not in item_users:
			item_users[i] = set()
		item_users[i].add(u)

for item,users in item_users.items():
	print(item,'corresponds to ' , users)

執行結果

('a', 'corresponds to ', set(['A', 'B']))
('c', 'corresponds to ', set(['B', 'D']))
('b', 'corresponds to ', set(['A', 'C']))
('e', 'corresponds to ', set(['C', 'D']))
('d', 'corresponds to ', set(['A', 'D']))