機器學習之基於協同過濾的推薦引擎

2021-06-21 05:34:31 字數 2874 閱讀 7433

首先,我們先看乙個例子:

協同過濾推薦演算法主要分為基於使用者(user-based)的協同過濾推薦演算法和基於專案(item-based)的協同過濾推薦演算法。

其中基於使用者的協同過濾推薦是

根據鄰居使用者的偏好資訊產生對目標使用者的推薦。通過相似性度量方法計算出相似使用者,並將相似使用者的評分結果作為推薦**結果返回給使用者。由圖可以看出mary對這幾部的電影的評價和tom對這幾部的電影評價很相近,所以我們就認為mary是tom的相似使用者,那麼在**tom對《槍王之王》時會利用mary對這部電影的評價結果。

同樣,基於專案的協同過濾推薦是根據相似專案的評價資訊來**目標專案的評價分數。由圖可以知道所有使用者對《唐山大**》和《阿凡達》的評價分數很相近,那麼就認為《唐山大**》和《阿凡達》是相似專案。那麼在**lucy對《阿凡達》的評價時會利用此專案的相似專案評價結果來進行**。

2、選擇相似度方法。這裡給出了三種相似度計算方法。我們都把相似度歸一化到了0到1之間,歐式距離方法用相似度等於1/(1+距離),皮爾遜相關係數原來的取值範圍為-1到1之間,余弦相似度的取值範圍原來也是在-1到1之間。

def ecludsim(ina,inb): #歐氏距離計算相似度

return 1.0/(1.0 + la.norm(ina - inb))

def pearssim(ina,inb): #皮爾遜相關係數(pearson correlation)計算相似度

if len(ina) < 3 : return 1.0

return 0.5+0.5*corrcoef(ina, inb, rowvar = 0)[0][1]

def cossim(ina,inb): #用余弦計算相似度

num = float(ina.t*inb)

denom = la.norm(ina)*la.norm(inb)

return 0.5+0.5*(num/denom)

3、計算專案相似度並推薦。

主要思路:

*尋找使用者沒有評價的電影,即資料集中0值得位置。

*計算**專案和其他專案之間的相似度並對該專案進行評價。

*將這些專案的評分進行從高到低排序。

'''

功能:估計**

輸入變數:

datamat:原始資料集

user:使用者編號

simmeas:相似度計算方法

item:專案編號

輸出變數:**的評價分

'''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 #如果某個物品評價為0,意味著使用者沒有對該物品評價,跳過

overlap = nonzero(logical_and(datamat[:,item].a>0,datamat[:,j].a>0))[0] #(1)

print 'item,j =',item,j

print 'overlap=',overlap

if len(overlap) == 0: similarity = 0 # 如果兩者沒有任何重合元素,則相似度為0

else: similarity = simmeas(datamat[overlap,item],datamat[overlap,j]) #計算這兩個專案的相似度

print 'the %d and %d similarity is: %f' % (item, j, similarity)

simtotal += similarity #這兩句**的作用是使評價分值在0到5之間

ratsimtotal += similarity * userrating

if simtotal == 0: return 0

else: return ratsimtotal/simtotal

'''功能:推薦(**)未評價的目標專案

輸入變數:

datamat:原始資料集

user:使用者編號

simmeas:選擇余弦相似度公式

estmethod:估計**

'''def recommend(datamat, user, n=3, simmeas=cossim, estmethod=standest):

unrateditems = nonzero(datamat[user,:].a==0)[1]#find unrated items 找到未評價的專案元素

if len(unrateditems) == 0: return 'you rated everything'

itemscores =

for item in unrateditems: #遍歷所有的未評價專案元素

estimatedscore = estmethod(datamat, user, simmeas, item) #估計**該專案元素

return sorted(itemscores, key=lambda jj: jj[1], reverse=true)[:n] #並對**得分進行排序

執行結果:

>>> 

[(2, 2.6645016297307467)]

分析:即**第2個使用者對第2個電影評價為2.66分

參考文章:1、

2、推薦方法總結:

協同過濾推薦演算法 推薦演算法 基於協同過濾CF

前邊我們已經介紹了推薦演算法裡的基於內容的推薦演算法cb,今天我們來介紹一下基於協同的推薦演算法collaboration filtering cf 協同過濾是乙個利用群體智慧型的乙個演算法,舉乙個簡單的例子,如果放假了你想去北京玩幾天,但是不知道北京都有哪些好玩的,你會怎麼做?你可能會上網查一下的...

基於物品的協同過濾推薦

思想 利用物品間的相似度,給使用者推薦與使用者過去行為物品相似的物品。資源 使用者物品評分矩陣 填空,即對使用者沒有過評分的物品進行 打分 物品相似度評測 改進的余弦相似度 u 表示使用者集,用r表示n m的評分矩陣,rij代表評分項,表示使用者i對物品j的評分。公式分子可以理解為 兩個物品有共同評...

基於協同過濾演算法的推薦

基於協同過濾演算法的推薦 本實驗選用資料為真實電商脫敏資料,僅用於學習,請勿商用 資料探勘的乙個經典案例就是尿布與啤酒的例子。尿布與啤酒看似毫不相關的兩種產品,但是當超市將兩種產品放到相鄰貨架銷售的時候,會大大提高兩者銷量。很多時候看似不相關的兩種產品,卻會存在這某種神秘的隱含關係,獲取這種關係將會...