# -*- coding: utf-8 -*-
import random
# 乙個使用者的標籤行為一般由乙個三元組組成《使用者,物品,標籤》()即使用者u給物品i打上了b標籤。
# 1.統計每個使用者最常用標籤;
# 2.對於每個標籤,統計被打過這個標籤次數最多的物品;
# 3.對於乙個使用者,找到他常用的標籤,從而找到具有這些標籤的熱門物品進行推薦。
# 從而可以得到使用者u對於物品i的興趣公式:
## 假設用records來表示來儲存標籤資料的三元組,即records[i]=[user, item, tag]
# usertags儲存使用者u打過標籤b的次數,即usertags[u][b]=n;
# tagitems儲存物品i被打過標籤b的次數,即tag_item[b][i]=n;
# useritems儲存使用者所打過標籤的物品,即useritems[u][i]=n;
# 統計各類數量
defaddvaluetomat
(themat, key, value, incr):
if key not
in themat: # 如果key沒出先在themat中
themat[key] = dict()
themat[key][value] = incr
else:
if value not
in themat[key]:
themat[key][value] = incr
else:
themat[key][value] += incr # 若有值,則遞增
usertags = dict()
tagitems = dict()
useritems = dict()
useritemstest = dict() # 測試集資料字典
# 初始化,進行各種統計
definitstat
(): datafile = open('***.dat')
line = datafile.readline()
while line:
if random.random() > 0.1: # 將90%的資料作為訓練集,剩下10%的資料作為測試集
terms = line.split("\t") # 訓練集的資料結構是[user, item, tag]形式
user = terms[0]
item = terms[1]
tag = terms[2]
addvaluetomat(usertags, user, tag, 1)
addvaluetomat(tagitems, tag, item, 1)
addvaluetomat(useritems, user, item, 1)
line = datafile.readline()
else:
addvaluetomat(useritemstest, user, item, 1)
datafile.close()
# 推薦演算法
defrecommend
(usr):
recommendlist = dict()
tagged_item = useritems[usr] # 得到該使用者所有推薦過的物品
for tag_, wut in usertags[usr].items(): # 使用者打過的標籤及次數
for item_, wit in tagitems[tag_].items(): # 物品被打過的標籤及被打過的次數
if item_ not
in tagged_item: # 已經推薦過的不再推薦
if item_ not
in recommendlist:
recommendlist[item_] = wut * wit # 根據公式
else:
recommendlist[item_] += wut * wit
return recommendlist
推薦系統演算法簡單總結
1 協同過濾和基於內容推薦有什麼區別?使用者u1喜歡的電影是a,b,c 使用者u2喜歡的電影是a,c,e,f 使用者u3喜歡的電影是b,d 協同過濾的辦法 那麼你完全可以忽略item的建模,因為這種辦法的決策是依賴user和item之間的關係,也就是這裡的使用者和電影之間的關係。我們不再需要知道ab...
簡單業務推薦排序演算法
tf計算因子代表了詞頻,即乙個單詞在文件中出現的次數。一般來說在某個文件中反覆出現的單詞,往往能夠表徵文件的主題資訊。即tf值越大,越能代表文件所反映的內容,那麼應該給予這個單詞更大的權值。為了抑制長文件在詞頻數量上存在優勢,詞頻因子tf的計算公式 tf 1 log n n表示特徵單詞在該文件中出現...
MapReduce案例 好友推薦簡單實現
一 好友推薦演算法在實際的社交環境中應用較多,比如qq軟體中的 你可能認識的好友 或者是facebook中的好友推介。常見的好友推介演算法有六度分割理論,三元閉包論和最基本的好友推介演算法。學習和分享好友推介演算法。假設使用者a有好友a1,a2,a3,則a1,a2,a3相互之間都可能通過好友a認識,...