問題解決(對應上面問題)
python ** + 詳細注釋
通過其他使用者(已對兩樣物品都評分)的評分來計算兩個物品相似度
一般有如下三種計算方法:
分別計算該物品與該使用者已評分的每個物品的相似度,並以該使用者的評分作為權重相乘,之後加權相似度求和,最後歸一化,轉化為評分
from numpy import
*from numpy import linalg as la #有關矩陣計算
# 三種計算物品 a,b 相似度的方法
defeuclidsim
(a, b)
:#歐氏距離
return
1.0/
(1.0
+ la.norm(a - b)
)def
pearssim
(a, b)
:#相關係數
iflen
(a)<3:
#評分人數太少,不具有效應
return
1.0return
0.5+
0.5*corrcoef(a, b, rowvar=0)
[0][
1]defcossim
(a, b)
:#余弦相似度
num =
float
(a.t * b)
#分子 denom = la.norm(a)
* la.norm(b)
#分母return
0.5+
0.5*
(num/denom)
def
standest
(datamat, user, simmeas, item)
:'''傳入評分矩陣 datamat
用 simmeas 方法計算兩種物品的相似度
估計使用者 user 對 items 的評分'''
n = shape(datamat)[1
]#評分矩陣中的物品數
simtotal =
0.0; ratsimtotal =
0.0#相似度求和,加權相似度求和
for j in
range
(n):
#遍歷每個物品
userrating = datamat[user, j]
#切片獲得使用者 user 對物品 j 的評分
if userrating ==0:
#使用者未對該物品評分,暫時不用管
continue
overlap = nonzero(logical_and(datamat[
:, item]
.a >0,
datamat[
:, j]
.a >0)
)[0]
#尋找兩個物品都評分的使用者列表
iflen
(overlap)==0
:#不存在對這兩個物品都評過分的使用者
similarity =
0#物品相似度
similarity = simmeas(datamat[overlap, item]
, datamat[overlap, j]
) simtotal += similarity #物品相似度求和
ratsimtotal += similarity * userrating #加權相似度求和
if simtotal ==0:
#不相似
return
0else
:return ratsimtotal/simtotal #歸一化,作為評分
def
recommend
(datamat, user, n=
10, simmeas=cossim, estmethod=standest)
:'''傳入評分矩陣 datamat
計算相似度方法 simmeas
評分方法 estmethod
給使用者 user 推薦 n 個物品'''
unrateditems = nonzero(datamat[user,:]
.a ==0)
[1]#未評分物品列表
iflen
(unrateditems)==0
:#沒有未評分物品
return
'no object'
itemscores =
#記錄估計的評分,list 方便排序
for item in unrateditems:
estimatedscore = estmethod(datamat, user, simmeas, item)
#執行上面的方法得到評分
(item, estimatedscore)
)#新增評分到估計評分列表
return
sorted
(itemscores,
key=
lambda jj: jj[1]
, reverse=
true)[
:n]#評分由大到小排序,取前 n 個物品
協同過濾推薦演算法 協同過濾推薦演算法總結
推薦演算法具有非常多的應用場景和商業價值,因此對推薦演算法值得好好研究。推薦演算法種類很多,但是目前應用最廣泛的應該是協同過濾類別的推薦演算法,本文就對協同過濾類別的推薦演算法做乙個概括總結,後續也會對一些典型的協同過濾推薦演算法做原理總結。推薦演算法概述 1 基於內容的推薦 這一類一般依賴於自然語...
協同過濾推薦演算法 推薦演算法 基於協同過濾CF
前邊我們已經介紹了推薦演算法裡的基於內容的推薦演算法cb,今天我們來介紹一下基於協同的推薦演算法collaboration filtering cf 協同過濾是乙個利用群體智慧型的乙個演算法,舉乙個簡單的例子,如果放假了你想去北京玩幾天,但是不知道北京都有哪些好玩的,你會怎麼做?你可能會上網查一下的...
協同過濾推薦演算法
協同過濾推薦演算法 分為基於使用者的協同過濾推薦usercf和基於物品的協同過濾推薦itemcf。介紹見 協同過濾的實現步驟 1 指導思想 這種過濾演算法的有效性基礎在於 1 使用者偏好具有相似性,即使用者可分類。這種分類的特徵越明顯,推薦準確率越高 2 物品之間具有相似性,即偏好某物品的人,都很可...