1. 程式人生 > >推薦系統的常用演算法原理和實現

推薦系統的常用演算法原理和實現

推薦系統的出現

推薦系統的任務就是解決,當用戶無法準確描述自己的需求時,搜尋引擎的篩選效果不佳的問題。聯絡使用者和資訊,一方面幫助使用者發現對自己有價值的資訊,另一方面讓資訊能夠展現在對他感興趣的人群中,從而實現資訊提供商與使用者的雙贏。

推薦演算法介紹

基於人口統計學的推薦

這是最為簡單的一種推薦演算法,它只是簡單的根據系統使用者的基本資訊發現使用者的相關程度,然後將相似使用者喜愛的其他物品推薦給當前使用者。

這裡寫圖片描述

系統首先會根據使用者的屬性建模,比如使用者的年齡,性別,興趣等資訊。根據這些特徵計算使用者間的相似度。比如系統通過計算髮現使用者A和C比較相似。就會把A喜歡的物品推薦給C。

優缺點:

  • 不需要歷史資料,沒有冷啟動問題
  • 不依賴於物品的屬性,因此其他領域的問題都可無縫接入。
  • 演算法比較粗糙,效果很難令人滿意,只適合簡單的推薦

基於內容的推薦

與上面的方法相類似,只不過這次的中心轉到了物品本身。使用物品本身的相似度而不是使用者的相似度。

這裡寫圖片描述

系統首先對物品(圖中舉電影的例子)的屬性進行建模,圖中用型別作為屬性。在實際應用中,只根據型別顯然過於粗糙, 還需要考慮演員,導演等更多資訊。通過相似度計算,發現電影A和C相似度較高,因為他們都屬於愛情類。系統還會發現使用者A喜歡電影A,由此得出結論,使用者 A很可能對電影C也感興趣。於是將電影C推薦給A。

優缺點:

  • 對使用者興趣可以很好的建模,並通過對物品屬性維度的增加,獲得更好的推薦精度
  • 物品的屬性有限,很難有效的得到更多資料
  • 物品相似度的衡量標準只考慮到了物品本身,有一定的片面性
  • 需要使用者的物品的歷史資料,有冷啟動的問題

協同過濾

協同過濾是推薦演算法中最經典最常用的,分為基於使用者的協同過濾和基於物品的協同過濾。那麼他們和基於人口學統計的推薦和基於內容的推薦有什麼區別和聯絡呢?

基於使用者的協同過濾——基於人口統計學的推薦

基於使用者的協同過濾推薦機制和基於人口統計學的推薦機制都是計算使用者的相似度,並基於“鄰居”使用者群計算推薦,但它 們所不同的是如何計算使用者的相似度,基 於人口統計學的機制只考慮使用者本身的特徵,而基於使用者的協同過濾機制可是在使用者的歷史偏好的資料上計算使用者的相似度,它的基本假設是,喜歡類似物品的使用者 可能有相同或者相似的口味和偏好。

基於物品的協同過濾——基於內容的推薦

基於專案的協同過濾推薦和基於內容的推薦其實都是基於物品相似度預測推薦,只是相似度計算的方法不一樣,前者是從使用者歷史的偏好推斷,而後者是基於物品本身的屬性特徵資訊。

協同過濾的優勢:

  • 它不需要對物品或者使用者進行嚴格的建模,而且不要求物品的描述是機器可理解的,所以這種方法也是領域無關的。
  • 這種方法計算出來的推薦是開放的,可以共用他人的經驗,很好的支援使用者發現潛在的興趣偏好

協同過濾的缺點:

  • 方法的核心是基於歷史資料,所以對新物品和新使用者都有“冷啟動”的問題
  • 推薦的效果依賴於使用者歷史偏好資料的多少和準確性
  • 在大部分的實現中,使用者歷史偏好是用稀疏矩陣進行儲存的,而稀疏矩陣上的計算有些明顯的問題,包括可能少部分人的錯誤偏好會對推薦的準確度有很大的影響等等
  • 對於一些特殊品味的使用者不能給予很好的推薦
  • 由於以歷史資料為基礎,抓取和建模使用者的偏好後,很難修改或者根據使用者的使用演變,從而導致這個方法不夠靈活

混合推薦演算法

以上介紹的方法是推薦領域最常見的幾種方法。但是可以看出,每個方法都不是完美的。因此實際應用中都是混合使用各種推薦演算法,各取所長。我們的大量醫療資料中,也可以多考慮一下什麼情況下更適合使用哪種推薦演算法,能更好的為醫生提供診斷資訊

協同過濾推薦演算法原理和實現

在推薦系統眾多方法中,基於使用者的協同過濾推薦演算法是最早誕生的,原理也較為簡單。該演算法1992年提出並用於郵件過濾系統。可以將基於使用者的協同過濾推薦演算法拆分為兩個步驟:

  1. 找到與目標使用者興趣相似的使用者集合
  2. 找到這個集合中使用者喜歡的、並且目標使用者沒有聽說過的物品推薦給目標使用者

發現興趣相似的使用者

通常用 Jaccard 公式或者餘弦相似度計算兩個使用者之間的相似度。設 N(u) 為使用者 u 喜歡的物品集合,N(v) 為使用者 v 喜歡的物品集合,那麼 u 和 v 的相似度是多少呢:

Jaccard 公式:

這裡寫圖片描述

餘弦相似度:

這裡寫圖片描述

假設目前共有4個使用者: A、B、C、D;共有5個物品:a、b、c、d、e。使用者與物品的關係(使用者喜歡物品)如下圖所示:

這裡寫圖片描述

如何一下子計算所有使用者之間的相似度呢?為計算方便,通常首先需要建立“物品—使用者”的倒排表,如下圖所示:

這裡寫圖片描述

然後對於每個物品,喜歡他的使用者,兩兩之間相同物品加1。例如喜歡物品 a 的使用者有 A 和 B,那麼在矩陣中他們兩兩加1。如下圖所示:

這裡寫圖片描述

計算使用者兩兩之間的相似度,上面的矩陣僅僅代表的是公式的分子部分。以餘弦相似度為例,對上圖進行進一步計算:

這裡寫圖片描述

到此,計算使用者相似度就大功告成,可以很直觀的找到與目標使用者興趣較相似的使用者。

推薦物品

首先需要從矩陣中找出與目標使用者 u 最相似的 K 個使用者,用集合 S(u, K) 表示,將 S 中使用者喜歡的物品全部提取出來,並去除 u 已經喜歡的物品。對於每個候選物品 i ,使用者 u 對它感興趣的程度用如下公式計算:

這裡寫圖片描述

其中 rvi 表示使用者 v 對 i 的喜歡程度,在本例中都是為 1,在一些需要使用者給予評分的推薦系統中,則要代入使用者評分。

舉個例子,假設我們要給 A 推薦物品,選取 K = 3 個相似使用者,相似使用者則是:B、C、D,那麼他們喜歡過並且 A 沒有喜歡過的物品有:c、e,那麼分別計算 p(A, c) 和 p(A, e):

這裡寫圖片描述
這裡寫圖片描述

看樣子使用者 A 對 c 和 e 的喜歡程度可能是一樣的,在真實的推薦系統中,只要按得分排序,取前幾個物品就可以了。

                                                    杏樹林研發  孫騰