協同過濾(cf)推薦演算法通過在使用者活動中尋找特定模式來為使用者產生有效推薦。它依賴於系統中使用者的慣用資料,例如通過使用者對其閱讀過書籍的評價可以推斷出使用者的閱讀偏好。這種演算法的核心思想就是:如果兩個使用者對於一些項的評分相似程度較高,那麼乙個使用者對於乙個新項的評分很有可能類似於另乙個使用者。值得注意的是,他們推薦的時候不依賴於項的任何附加資訊(例如描述、元資料等等)或者使用者的任何附加資訊(例如喜好、人口統計相關資料等等)。cf的方法大體可分為兩類:分別為鄰域和基於模型的方法。鄰域方法(即基於記憶體的cf)是使用使用者對已有項的評分直接**該使用者對新項的評分。與之相反,基於模型的方法是使用歷史評分資料,基於學習出的**模型,**對新項的評分。通常的方式是使用機器學習演算法,找出使用者與項的相互作用模型,從而找出資料中的特定模式。
基於鄰域的cf方法意在找出項與項之間的聯絡(基於項的cf),或者使用者與使用者之間的聯絡(基於使用者的cf)。
首先,在做基於項的協同過濾之前,我們先通過例子來看一下基於使用者的協同過濾。
假設我們有一組使用者,他們表現出了對一**書的喜好。使用者對一本圖書的喜好程度越高,就會給其更高的評分,範圍是從1到5。我們來通過乙個矩陣來展示它,行代表使用者,列代表圖書(圖1)。
圖1:使用者對圖書的評分。所有的評分範圍從1到5,5代表喜歡程度最高。第乙個使用者(行1)對第乙個圖書(列1)的評分是4。空的單元格代表使用者未給圖書評價。
使用基於使用者的協同過濾方法,我們首先要做的是基於使用者給圖書作出的評價計算出使用者之間的相似度。讓我們從乙個單一使用者的角度考慮這個問題,看圖1中的第一行。要做到這一點,常見的做法是將使用包含了使用者喜好項的向量(或陣列)代表每乙個使用者。相較於使用多樣化的相似度量這種做法非常直接。在這個例子中,我們將使用余弦相似性。當我們把第乙個使用者和其他五個使用者進行比較時,就能直觀地看到他和其他使用者的相似程度(圖2)。對於大多數相似度量,向量之間相似度越高,代表彼此更相似。本例中,第乙個使用者與兩位其他使用者非常相似,有兩本共同書籍,與另兩位使用者的相似度低一些,只有一本共同書籍,而與最後一名使用者完全不相似,沒有一本共同書籍。
圖2:第乙個用於與其他使用者的相似度。可以使用余弦相似性在乙個單一維度繪製使用者之間的相似度。
更一般地,我們可以計算出每個使用者的相似性,並且在相似矩陣中表示它們(圖3)。這是乙個對稱矩陣,這意味著對它進行數學計算會有一些有用的特性。單元格的背景顏色表明使用者相似度的高低,更深的紅色表示他們之間更相似。
圖3:使用者間的相似矩陣。使用者之間的相似度基於使用者對所讀圖書的評價資料的相似度
現在我們使用基於使用者的協同過濾方法準備好了為使用者生成推薦。在一般情況下,對於乙個給定的使用者,這意味著找到最相似的使用者,並推薦這些類似的使用者欣賞的項,並根據使用者相似度對其進行加權。我們先來看第乙個使用者,為他們生成一些推薦。首先,我們找到了與第乙個使用者最相似的另一使用者,刪除使用者已經評價過的書籍,給最相似使用者正在閱讀的書籍加權,然後計算出總和。在這種情況下,我們計算出n=2,表示為了產生推薦,需要找出與目標使用者最相似的兩個使用者。這兩個使用者分別是2和3(圖4)。然後,第乙個使用者已經評價了5和1,所產生的推薦書是3(4.5分)和4(3分)。
圖4:為乙個使用者進行推薦。我們將選取最相似的兩個使用者所評價的書,進行加權,然後推薦加權分數最高且目標使用者未評價過的圖書。
通過基於使用者的協同過濾讓我們對協同過濾有了一定的理解。接著讓我們再看乙個例子,基於項的協同過濾。同樣地,我們以評價過一些書籍的一組使用者為基礎(圖1)。
類似於基於使用者的協同過濾,在基於項的協同過濾中,我們要做的第一件事也是計算相似矩陣。然而,這一次,我們要看的是項,而非使用者的相似性。類似地,我們要計算出一本書和其它書的相似性,我們將使用評價過一本書的使用者向量(或陣列)表示這本圖書,並比較他們的余弦相似性函式。在第一列的第一本書,最類似於第五列的第五本書,因為評價他們的使用者大致相同(圖5)。第三本書有兩個相同的評價使用者,第四和第二本書只有乙個共同評價使用者,而最後一本書是不認為是相似的,因為同它有沒有共同的評價使用者。
圖5:第乙個圖書和其它圖書的對比。圖書用評價過它們的使用者表示。使用相似值(0-1)表示相似度。兩本書越相似則相似值越高
為了更充分地顯示結果,我們可以顯示表示所有圖書之間相似度的相似矩陣(圖6)。同樣地,單元格背景顏色的深淺表示相似度的高低,顏色越深表明相似度越高。
圖6:書的相似矩陣
現在,我們已經知道了圖書之間的相似度,我們可以為使用者進行推薦。在基於項的方法中,我們採用被使用者評價過的項,推薦和被採取項最相似的項。在我們的例子中,第乙個使用者首先將被推薦第三本書,其次是第六本書(圖7)。另外,我們只推薦和使用者已經評價過圖書最相似的前兩本書。
圖7:為使用者進行推薦。我們選取他們評價過的圖書,找出與他們最相似的前兩本書,進行加權,然後推薦給使用者加權分最高且他沒有讀過的書。
鑑於基於使用者和基於項的協同過濾的描述聽起來非常相似,有趣的是它們可以產生不同的推薦結果。即使在我們這裡給出的簡易的例子中,即使使用的資料相同,這兩種方法產生對於同一使用者產生的推薦結果也不相同。當你構建推薦系統的時候,這兩種協同過濾方式都是值得考慮的。即使將這兩種方式描述給非專家聽,它們聽起來也非常相似,在實踐中,他們可以產生不同的結果,為使用者提供了不同的體驗。
基於模型的方法可以幫助克服一些基於鄰域的方法的侷限性。它不像基於鄰域的方法,使用使用者項評分直接**新的項。基於模型的方法會在使用評分去學習**模型的基礎上,去**新項。一般的想法是使用機器學習演算法建立使用者和項的相互作用模型,從而找出資料中的模式。在一般情況下,基於模型的cf被認為是建立cf推薦系統的更先進的演算法。有許多不同的演算法可用於構建模型並基於這些模型進行**,例如,貝葉斯網路、聚類、分類、回歸、矩陣分解、受限玻爾茲曼機等等。這些技術在為了最終贏得netflix獎的解決方案中扮演了關鍵角色。netflix發起了乙個競賽,從2023年到2023年提供一百萬美元獎金,頒發給產生的推薦比他們自己的推薦系統精確10%以上的推薦系統團隊。成功獲獎的解決方案是netflix研發的乙個整合(即混合)了超過100種演算法模型,這些演算法模型都採用了矩陣分解和受限玻爾茲曼機。
矩陣因子分解(如奇異值分解,奇異值分解+ +)將項和使用者都轉化成了相同的潛在空間,它所代表了使用者和項之間的潛相互作用(圖8)。矩陣分解背後的原理是潛在特徵代表了使用者如何給項進行評分。給定使用者和項的潛在描述,我們可以**使用者將會給還未評價的項多少評分。
圖8:矩陣分解表示。使用者偏好矩陣可以被分解成乙個使用者主題矩陣乘以乙個主題項矩陣。
在這篇文章中,我們討論了三種基本的協同過濾的實現方法。基於項、基於使用者和基於矩陣分解之間的差異是很微妙的,很難簡單明瞭地解釋它們。了解它們之間的差異將有助於你選擇最適合你的推薦演算法。在接下來的文章中,我們會繼續更加深入地介紹一些流行的推薦演算法。
檢視英文原文:
overview of recommender algorithms – part 2
infoQ推薦演算法綜述筆記
推薦系統演算法通常是某類推薦模型的實現,它負責獲取資料,例如使用者的喜好和可推薦項的描述,以及 給定的使用者組會對哪些選項感興趣。cf的方法大體可分為兩類 分別為鄰域和基於模型的方法。鄰域方法 即基於記憶體的cf 是使用使用者對已有項的評分直接 該使用者對新項的評分。與之相反,基於模型的方法是使用歷...
推薦系統綜述
uir rui 是使用者u對物品i的實際評分,而r u i hat r ui 是推薦系統給出的 評分,則rmse定義為 mae定義為 topn推薦 此方法一般不考慮評分,而是為使用者提供乙個個性化推薦列表,通過 使用者對物品的興趣度對列表進行排序,選取其中前n個物品推薦給使用者,通常用於電子商務 社...
演算法 排序演算法綜述
排序演算法有很多種,本文主要介紹基本的排序演算法和實現,並分析複雜度和穩定性。一 n2 的演算法 1 插入排序 插入排序十分好理解,在無序的陣列中選擇乙個數值,插入到有序的陣列當中,這個過程是穩定的。實現 如下 1 template 2 void insertionsort vector arr i...