包含兩個步驟:
a. 計算使用者之間的相似度:找到和目標使用者興趣相似的使用者集合。
b. 根據使用者相似度及使用者對物品的評價為物品打分:找到這個集合中的使用者喜歡的,且目標使用者沒有聽說過的物品推薦給目標使用者。
step1: 計算使用者相似度
根據協同過濾演算法的定義,這裡主要是利用使用者行為的相似度來計算興趣的相似度。給定使用者u和使用者v,令n(u)和n(v)分別表示使用者u和使用者v曾經有過正反饋的物品集合,則有如下三種方式計算相似度:
jaccard公式
余弦相似度(usercf演算法)
改進的余弦相似度(useriif演算法)
在useriif演算法中,n(i) n(i)n(i)是物品i的熱度,可見其對熱門物品進行了懲罰,因為兩個使用者對冷門物品採取過同樣的行為更能說明他們興趣的相似度。
這裡要強調乙個工程實現上的trick。在計算使用者行為之間的相似度時,如果按照定義實現的話,需要對兩兩使用者的行為集合進行統計,這樣的時間複雜度為o(∣u∣∗∣u∣) ,但使用者行為往往是十分稀疏的,很多使用者之間的行為並沒有交集,導致時間浪費在這些不必要的計算上。這時就可以建立item-user的倒排表,這樣在同乙個item下面的user兩兩之間一定是在這個item上有交集的,所以只需要遍歷所有的item,對其下所有的user兩兩進行統計即可,這樣可以極大降低時間複雜度。
step2:為物品打分
在統計完使用者之間的相似度之後,就可以利用這種使用者相似度以及使用者對物品的評價為物品打分。其公式如下:
在實現的時候,往往會取乙個較小的k值,先召回一批物品,然後為這些物品中沒出現在目標使用者中的物品利用上述公式進行打分。
與基於使用者的協同過濾演算法一樣,基於物品的協同過濾演算法也是基於鄰域的一種做法。它也可以分為兩步:
a. 計算物品之間的相似度。
b. 根據物品的相似度和使用者的歷史行為為使用者生成推薦列表。
step1: 計算物品相似度
計算物品相似度主要還是利用使用者的行為資料,即比較對兩個物品有過正反饋的使用者集合的相似性。令n(i)為喜歡物品i的使用者集合,則有如下幾種相似度計算方法:
購買了該商品的使用者也經常購買的其他商品
余弦相似度(itemcf演算法)
上面的公式在計算的時候會導致物品與熱門物品的相似度都很高,因此可以加上物品j的熱度懲罰項,變成了如下的余弦相似度的形式:
改進的余弦相似度(itemiuf演算法)
與useriif演算法類似,這裡也對熱門使用者進行了懲罰,即活躍使用者對物品相似度的貢獻應該小於不活躍的使用者。
step2:為物品打分
在統計完物品之間的相似度之後,就可以利用這種物品相似度以及使用者對歷史物品的評價為物品打分。其公式如下:
使用者的行為(user, item)是可以表示為二分圖的,比如下圖:
那麼任務就變成了在二分圖上為使用者進行個性化推薦,即給使用者u推薦物品的任務可以轉化為度量使用者頂點vu和與vu沒有邊直接相連的物品節點在圖上的相關性,相關性越高的物品在推薦列表中的權重就越高。
1.兩個頂點之間有很多路徑相連;
2.連線兩個頂點之間的路徑長度都比較短;
3.連線兩個頂點之間的路徑不會經過出度比較大的頂點。
基於上面這三個主要因素,可以用personalrank演算法進行圖上的隨機遊走推薦,其原理為:要給使用者u進行個性化推薦,可以從使用者u對應的節點vu開始在使用者物品二分圖上進行隨機遊走。遊走到任何乙個節點時,首先按照概率α決定是繼續遊走,還是停止這次遊走並從vu 節點開始重新遊走。如果決定繼續遊走,那麼就從當前節點指向的節點中按照均勻分布隨機選擇乙個節點作為遊走下次經過的節點。這樣,經過很多次隨機遊走後,每個物品節點被訪問到的概率會收斂到乙個數。最終的推薦列表中物品的權重就是物品節點的訪問概率。
表述為遞推公式如下:
Axure RP 第一部分
axure rp是乙個專業的快速原型設計工具。axure 發音 ack sure 代表美國axure公司 rp則是rapid prototyping 快速原型 的縮寫。axure rp是美國axure software solution公司旗艦產品,是乙個專業的快速原型設計工具,讓負責定義需求和規格...
第一部分 初識Solr
第一章 solr簡介 這章主要包括內容 這本書講述nosql技術,apache solr 像它的非關係模式兄弟一樣,針對於某些問題進行了優化。特別的,solr在處理企業級大量資料 及時搜尋 文字資料 返回相關性結果等方面進行了很大優化。這裡說的只是冰山一角,讓我們從下面幾方面來進行詳細敘說 solr...
css排雷第一部分
import url basic.css warning urgent plant moons plant moons 1 a href span title feature lang en 選出屬性等於lang或者以lang開頭的所有元素。選擇h1 strong 可以解釋為選擇h1字元素中的所有s...