《推薦系統實踐》項亮 程式實現
阿新 • • 發佈:2018-12-14
本文為筆者在學習《推薦系統實踐》一書時,對書中程式進行的實踐,僅作為學習參考,如有可以改進之處,也還請各位朋友給予指教,非常感謝。 在查詢本文中,關於原書某頁的演算法實現時,可以直接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']))