推薦演算法簡單實現

2021-07-11 16:40:33 字數 2021 閱讀 2893

# -*- 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認識,...