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

2021-08-29 12:12:35 字數 3494 閱讀 2038

概念: 基於物品的協同過濾演算法,優化演算法

對比:使用者協同過濾的優缺點

python編碼實現

基於使用者的協同過濾演算法

基於商品的協同過濾演算法

適用場景

時效性較強,使用者個性化興趣不太明顯的領域

長尾物品豐富,使用者個性化需求強烈的領域

注重點興趣相似的小群體的熱點

維繫使用者的歷史興趣,推薦結果解釋性強

使用者互動特點

使用者有新行為,不一定造成推薦結果的立即變化

推薦結果的實時變化

缺點

假定《使用者-商品資料》如下,可以計算出商品之間的相似度

#第一步: 計算每個商品之間的相似度

def getmostlikeitemsgroupk(itemusersdict):

recommdict = {}

for i, usersi in itemusersdict.items():

for j, usersj in itemusersdict.items():

if i < j:

if i not in recommdict.keys():

recommdict[i] = {}

if j not in recommdict.keys():

recommdict[j] = {}

# 計算相似度,共同互動商品數

ratio= 0.0

seta = set(usersi)

setb = set(usersj)

common = seta.intersection(setb)

if common.__len__() == 0:

ratio= 0.0

else:

bot = math.sqrt(seta.__len__() * setb.__len__())

ratio= float(common.__len__()) / bot

recommdict[i][j] = ratio

recommdict[j][i] = ratio

# 對m中每個用的相似度字典按照相似度倒排序

dict2 = {}

for k,v in recommdict.items():

dict2[k] = sorted(v.items(), key=lambda e: e[1], reverse=true)

#1,物品相似度的未歸一化

#return dict2

#2,物品相似度的歸一化:karypis 在研究中發現如果將

def normalitemlike(parmdict):

dict3 = {}

for k,v in parmdict.items():

dict3[k] =

mx = v[0][1]

for t in v:

return dict3

return normalitemlike(dict2)

def recommitemcf(u,k):

recommdict = {}

useritemsdict = {}

itemusersdict = {}

file = open("/home/wang/ideaprojects/big124/mypython/a")

while true :

line = file.readline()

if line != '':

arr = line.replace("\n","").split("::")

uid = int(arr[0])

iid = str(arr[1])

# useritemdict

if uid in useritemsdict.keys():

else :

useritemsdict[uid] = [iid]

# itemusersdict

if iid in itemusersdict.keys():

else:

itemusersdict[iid] = [uid]

else:

break ;

# 1,尋找每個使用者history商品: 其他相似的商品組

dict1 = getmostlikeitemsgroupk(itemusersdict)

for i in useritemsdict[u]: # 找到每個使用者的歷史商品

itemsk = dict1[i][:k] #取出k個相似商品

for j in itemsk:

if j[0] not in useritemsdict[u]:

#2, 生成商品推薦列表

if j[0] not in recommdict.keys():

recommdict[j[0]] = 0.0

recommdict[j[0]] = recommdict[j[0]] + j[1]

#3,排序商品推薦列表

return sorted(recommdict.items() , key=lambda e:e[1] ,reverse=true)

###############第三步, 測試結果############################

if __name__ =="__main__":

recommlist=recommitemcf(2,3)

for i in recommlist:

print i

對比結果:基於商品的協同過濾,物品相似度的歸一化後準確率變高

#基於使用者的協同過濾:推薦結果

# ('c', 1.533734661597076)

# ('d', 0.8304820237218405)

# ('c', 0.9082482904638631)

# ('d', 0.5773502691896258)

# ('c', 1.1123724356957945)

# ('d', 0.7071067811865476)

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

itemcf itemcollaborationfilter,基於物品的協同過濾 比如,使用者a之前買過 資料探勘導論 該演算法會根據此行為給你推薦 機器學習 但是itemcf演算法並不利用物品的內容屬性計算物品之間的相似度,它主要通過分析使用者的行為記錄計算物品之間的相似度。該演算法認為,物品a和...

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

itemcf itemcollaborationfilter,基於物品的協同過濾 比如,使用者a之前買過 資料探勘導論 該演算法會根據此行為給你推薦 機器學習 但是itemcf演算法並不利用物品的內容屬性計算物品之間的相似度,它主要通過分析使用者的行為記錄計算物品之間的相似度。該演算法認為,物品a和...

基於物品的協同過濾演算法

核心思想 給使用者推薦那些和他們之前喜歡的物品相似的物品。不同於基於內容的推薦,基於物品的協同過濾中的相似主要是利用使用者行為的集體智慧型。相似度的計算計算相似度的實現方式是多種多樣的 對物品的喜愛程度並不能單純的使用二值屬性來評價,很多資料集包含了使用者對物品的詳細評分資料,將評分資料進一步引入到...