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