推薦算法-協(xié)同過(guò)濾3 基于物品

amazon , netflix, hulu , youtube

基本思想

ItemCF 并不利用物品的內(nèi)容屬性計(jì)算物品之間的相似度,他主要通過(guò)分析用戶行為記錄物品的相似度。
算法認(rèn)為:A 和B 相似,是由于喜歡A 的用戶大都也喜歡B
利用用戶的歷史行為給推薦結(jié)果提供推薦解釋。例如喜歡或者收藏過(guò)的射雕,推薦天龍八部。

基本步驟:

1、計(jì)算物品相似度
2、根據(jù)物品相似度和用戶的歷史行為生成推薦列表

物品相似度計(jì)算

Wij = |同時(shí)喜歡物品i,j 的人數(shù)| / |喜歡物品i的人數(shù)|

懲罰熱門物品:
Wij = |同時(shí)喜歡物品i,j 的人數(shù)| / sqrt(喜歡i 的人數(shù)x 喜歡j的人數(shù))**

物品相似矩陣計(jì)算
def ItemSimilarity(train):
    c=N={}
   for u,items in train.items():  建立用戶物品倒排表
        for i in items :
             N[i] +=1 
             for j in items;
                 c[i,j]+=1    
   S = {}
   for i , related_items in C.items
        for j,cij in related_items.items():
               Sij = cij /match.sqrt(N[i]*N[j])   計(jì)算物品相似度     
return S 

計(jì)算用戶u對(duì)一個(gè)物品的興趣:
Puj = sum(Sji, Rui) j (- 和j 最類似的k個(gè)物品集合
該公式的含義是:
**和用戶歷史上感興趣的物品越相似的物品,越可能在用戶的推薦列表中獲得高排名。

def Recommendation(train , user_id, S,K) : 
     rank = {}
    ru = train[user_id]   
    for rui , pi in ru.items():  # pi 可以簡(jiǎn)單的命名為1  
         for j,sj in sorted (S[i].items, key= itemgetter(1),reverse=True)[0:k]      
                                最相似的K個(gè)物品
             rank[j].weight +=pi*sj 
             rank[j].reason[i]=pi*wj 
  return rank .   

itemCF 流行度效果更好些,但是準(zhǔn)確率隨k值提高沒(méi)有改善。

剔除用戶活躍度對(duì)物品相似度的影響

1、IUF
Sij = cij /match.sqrt(N[i]*N[j]) 計(jì)算物品相似度
弱化,那么僅僅忽略 Cij = (1+1/log(1+N(u))
2、當(dāng)然也可以忽略掉活躍度過(guò)高的用戶。

物品相似度的歸一化

W' ij = wij / maxJ(wij) 按類歸一化
歸一化后,覆蓋率能夠提高4個(gè)百分點(diǎn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容