from numpy import *
from numpy import linalg as la
def ecludsim(ina, inb):
return 1.0/(1.0+ la.norm(ina - inb))
def cossim(ina, inb):
num = float(ina.t*inb)
denom = la.norm(ina)*la.norm(inb)
return 0.5+0.5*(num/denom)
def standest(datamat, user, simmeas, item):
n = shape(datamat)[1]
simtotal = 0.0; ratsimtotal = 0.0
for j in range(n):
userrating = datamat[user,j]
if userrating == 0:continue
overlap = nonzero(logical_and(datamat[:,item].a>0,datamat[:,j].a>0))[0]
if len(overlap) == 0:similarity = 0
else:similarity = simmeas(datamat[overlap,item],datamat[overlap,j])
simtotal += similarity
ratsimtotal += similarity * userrating
if simtotal == 0:return 0
else: return ratsimtotal/simtotal
def recommend(datamat, user, n=4, simmeas = cossim, estmethod = standest):
unrateditems = nonzero(datamat[user,:].a == 0)[1]
if len(unrateditems) == 0:return "you rated everything"
itemscores =
for item in unrateditems:
estimatescore = estmethod(datamat, user, simmeas, item)
return sorted(itemscores,key=lambda jj: jj[1],reverse=true)[:n]
if __name__=="__main__":
mymat = mat([[4,3,0,1,3,5],
[1,4,0,2,0,4],
[5,0,0,0,1,0],
[5,1,0,2,1,4],
[4,3,5,1,5,4],
[4,0,3,1,3,3],
[4,3,2,5,0,5]])
outcome = recommend(mymat,0)
print outcome
生成的mat矩陣可以看做每個使用者對某些商品的評分資料,一行代表乙個使用者,一列代表一件商品,我們要做的是對沒有評分的資料進行**並給出值。問題要解決的是基於商品的推薦,因此我們假設使用者對於同一種商品的評分都具有一定的共性,這樣,對於沒有評分的資料,我們可以根據其他使用者對其的評分進行**。**給出了兩個相似度計算函式,ecludsim和cossim。
最後乙個行數recommend是計算沒有評分的資料並給出**評分的,是乙個簡單的推薦引擎,最後一句的意思是對於給出的推薦按照評分大小排列並且取前n個資料。standest是用來計算沒有評分的項與其他評分的項之間的相似度的,並最終返回**資料。
乙個簡單的執行結果如下:
《推薦系統實踐》閱讀筆記二 利用使用者標籤進行推薦
定義 應用 delicious,citeulike,last.fm,豆瓣,hulu 使用方法 因此我們需要解答 使用者為什麼要打標籤 使用者如何打標籤 使用者打什麼樣的標籤。因此我們可以通過衡量標籤的余弦相似性來衡量物品之間的相似性,同時也可以根據給物品打過標籤的使用者數來衡量物品的平均熱門度。同時...
基於使用者信任和商品相似度的隨機遊走推薦模型
標題讀起來很拗口,原文是trustwalker a random walk model for combining trust based and item based recommendatio,翻譯得不好見諒 如上圖所示,每個人對一些商品有過評分,用直線連線的使用者之間存在信任關係,現在我們要 ...
基於使用者信任和商品相似度的隨機遊走推薦模型
標題讀起來很拗口,原文是trustwalker a random walk model for combining trust based and item based recommendatio,翻譯得不好見諒 如上圖所示,每個人對一些商品有過評分,用直線連線的使用者之間存在信任關係,現在我們要 ...