常用推薦演算法

語言: CN / TW / HK

1/目前常用的推薦演算法

推薦演算法具有非常多的應用場景和商業價值,因此對推薦演算法值得好好研究。

推薦演算法種類很多,但是目前應用最廣泛的應該是協同過濾類別的推薦演算法,
本文就對協同過濾類別的推薦演算法做一個概括總結,後續也會對一些典型的協同過濾推薦演算法做原理總結。

推薦演算法是非常古老的,在機器學習還沒有興起的時候就有需求和應用了。

概括來說,可以分為以下5種:

<1>基於內容的推薦

  這一類一般依賴於自然語言處理NLP的一些知識,
  通過挖掘文字的TF-IDF特徵向量,來得到使用者的偏好,進而做推薦。
  這類推薦演算法可以找到使用者獨特的小眾喜好,而且還有較好的解釋性。
  這一類需要NLP的基礎。
  每個人的喜好都不一樣,這種推薦演算法正好可以滿足這種要求。

<2>協同過濾推薦

  協同過濾是推薦演算法中目前最主流的種類,花樣繁多,在工業界已經有了很多廣泛的應用。
  它的優點是不需要太多特定領域的知識,可以通過基於統計的機器學習演算法來得到較好的推薦效果。
  最大的優點是工程上容易實現,可以方便應用到產品中。
  目前絕大多數實際應用的推薦演算法都是協同過濾推薦演算法。
  user-based
  item-based
  model-based

<3>混合推薦:

   這個類似我們機器學習中的整合學習,博才眾長,
   通過多個推薦演算法模型的結合,得到一個更好的推薦演算法,起到三個臭皮匠頂一個諸葛亮的作用。

   比如通過建立多個推薦演算法的模型,最後用`投票法`決定最終的推薦結果。
   混合推薦理論上不會比單一任何一種推薦演算法差,但是使用混合推薦,演算法複雜度就提高了,在實際應用中有使用,但是並沒有單一的協同過濾推薦演算法,比如邏輯迴歸之類的二分類推薦演算法廣泛。

<4>基於規則的推薦:

   這類演算法常見的比如基於最多使用者點選,最多使用者瀏覽等,屬於大眾型的推薦方法,
   在目前的大資料時代並不主流。
   有點像人為干預。

<5>基於人口統計資訊的推薦:

   這一類是最簡單的推薦演算法了,它只是簡單的根據系統使用者的基本資訊發現使用者的相關程度,然後進行推薦,目前在大型系統中已經較少使用。

image.png

2/協同過濾推薦演算法

協同過濾(Collaborative Filtering,簡稱cf)作為推薦演算法中最經典的型別,包括線上的協同和離線的過濾兩部分。

所謂線上協同,就是通過線上資料找到使用者可能喜歡的物品,而離線過濾,則是過濾掉一些不值得推薦的資料,比如推薦值評分低的資料,或者雖然推薦值高但是使用者已經購買的資料。

協同過濾的模型一般為m個物品item,m個使用者user的資料,只有部分使用者和部分物品之間是有評分資料的,其它部分評分是空白,此時我們要用已有的部分稀疏資料來預測那些空白的物品和使用者之間的評分關係,找到最高評分的物品推薦給使用者。

一般來說,協同過濾推薦分為三種類型。
    第一種是**基於使用者(user-based)的協同過濾**,
    第二種是**基於專案(item-based)的協同過濾**,
    第三種是**基於模型(model based)的協同過濾**。

基於使用者(user-based)的協同過濾主要考慮的是使用者和使用者之間的相似度,
只要找出相似使用者喜歡的物品,並預測目標使用者對對應物品的評分,就可以找到評分最高的若干個物品推薦給使用者,及先召回,再排序.
物以類聚,人以群分。


而基於專案(item-based)的協同過濾和基於使用者的協同過濾類似,只不過這時我們轉向找到物品和物品之間的相似度,只有找到了目標使用者對某些物品的評分,那麼我們就可以對相似度高的類似物品進行預測,將評分最高的若干個相似物品推薦給使用者。
比如你在網上買了一本機器學習相關的書,網站馬上會推薦一堆機器學習,大資料相關的書給你,這裡就明顯用到了基於專案的協同過濾思想。

我們可以簡單比較下基於使用者的協同過濾和基於專案的協同過濾:
   (1)基於使用者的協同過濾需要線上找使用者和使用者之間的相似度關係,
       計算複雜度肯定會比基於專案的協同過濾高。
       但是可以幫助使用者找到新類別的有驚喜的物品。
   (2)而基於專案的協同過濾,由於考慮的物品的相似性一段時間不會改變,
       因此可以很容易的離線計算,準確度一般也可以接受,
       但是推薦的多樣性來說,就很難帶給使用者驚喜了。

一般對於小型的推薦系統來說,基於專案的協同過濾肯定是主流。
但是如果是大型的推薦系統來說,則可以考慮基於使用者的協同過濾,當然更加可以考慮我們的第三種類型,基於模型的協同過濾。

基於模型(model based)的協同過濾是目前最主流的協同過濾型別了,我們的一大堆機器學習演算法也可以在這裡找到用武之地。下面我們就重點介紹基於模型的協同過濾。

3/基於模型的協同過濾

基於模型的協同過濾作為目前最主流的協同過濾型別,這裡主要是對其思想做有一個歸類概括。

我們的問題是這樣的m個物品,m個使用者的資料,只有部分使用者和部分資料之間是有評分資料的,其它部分評分是空白,此時我們要用已有的部分稀疏資料來預測那些空白的物品和資料之間的評分關係,找到最高評分的物品推薦給使用者。

對於這個問題,用機器學習的思想來建模解決,主流的方法可以分為:
   用關聯規則演算法,聚類演算法,分類演算法,迴歸演算法,矩陣分解,神經網路,圖模型以及隱語義模型來解決。
   下面我們分別加以介紹。

<1>用關聯規則推薦演算法做協同過濾

一般我們可以找出使用者購買的所有物品資料裡頻繁出現的項集序列,來做頻繁項集挖掘,
找到滿足支援度閾值的關聯物品的頻繁N項集或者序列。
如果使用者購買了頻繁N項集或者序列裡的部分物品,那麼我們可以將頻繁項集或序列裡的其他物品按一定的評分準則推薦給使用者,這個評分準則可以包括支援度,置信度和提升度等。
常用的關聯規則推薦演算法有Apriori,FP growth 和PrefixSpan。

<2>用聚類演算法做協同過濾

用聚類演算法做協同過濾就和前面的基於使用者或者專案的協同過濾有些類似了。
我們可以按照使用者或者按照物品基於一定的距離度量來進行聚類。
如果基於使用者聚類,則可以將使用者按照一定距離度量方式分成不同的目標人群,將同樣目標人群評分高的物品推薦給目標使用者。
基於物品聚類的話,則是將使用者評分高物品的相似同類物品推薦給使用者。
常用的聚類推薦演算法有K-Means, BIRCH, DBSCAN和譜聚類,

<3>用分類演算法做協同過濾

如果我們根據使用者評分的高低,將分數分成幾段的話,則這個問題變成分類問題。
比如最直接的,設定一份評分閾值,評分高於閾值的就是推薦,評分低於閾值就是不推薦,我們將問題變成了一個二分類問題。雖然分類問題的演算法多如牛毛,但是目前使用最廣泛的是邏輯迴歸LR。

因為邏輯迴歸的解釋性比較強,每個物品是否推薦我們都有一個明確的概率放在這,同時可以對資料的特徵做工程化,得到調優的目的。

目前邏輯迴歸做協同過濾在BAT等大廠已經非常成熟了。

常見的分類推薦演算法有邏輯迴歸和樸素貝葉斯,兩者的特點是解釋性很強。

<4用迴歸演算法做協同過濾

用迴歸演算法做協同過濾比分類演算法看起來更加的自然。
我們的評分可以是一個連續的值而不是離散的值,通過迴歸模型我們可以得到目標使用者對某商品的預測打分。

常用的迴歸推薦演算法有Ridge迴歸,迴歸樹和支援向量迴歸。

協同過濾總結

協同過濾作為一種經典的推薦演算法種類,在工業界應用廣泛,它的優點很多,模型通用性強,不需要太多對應資料領域的專業知識,工程實現簡單,效果也不錯。這些都是它流行的原因。

協同過濾也有些難以避免的難題,比如令人頭疼的“冷啟動”問題,我們沒有新使用者任何資料的時候,無法較好的為新使用者推薦物品。
同時也沒有考慮情景的差異,比如根據使用者所在的場景和使用者當前的情緒。
當然,也無法得到一些小眾的獨特喜好,這塊是基於內容的推薦比較擅長的。

以上就是協同過濾推薦演算法的一個總結。