【詳解】多元的智能推薦系統

寫在前文:

最近在涉獵推薦系統,可謂是內容繁多,我會偏向機器學習&深度學習方向探究推薦系統,尤其是協同過濾算法~一起學習吧

協同過濾簡介:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-IvCfmhXK-1589012804662)(D:\CSDN\pic\智能推薦系統\1589009708811.png)]

協同過濾(Collaborative Filtering)作爲推薦算法中最經典的類型,包括在線的協同和離線的過濾兩部分。所謂在線協同,就是通過在線數據找到用戶可能喜歡的物品,而離線過濾,則是過濾掉一些不值得推薦的數據,比如推薦值評分低的數據,或者雖然推薦值高但是用戶已經購買的數據。

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

一般來說,協同過濾推薦分爲三種類型。第一種是基於用戶(user-based)的協同過濾,第二種是基於項目(item-based)的協同過濾,第三種是基於模型(model based)的協同過濾


一、常用的評價指標

四個基本概念

TP、True Positive 真陽性:預測爲正,實際也爲正

FP、False Positive 假陽性:預測爲正,實際爲負

FN、False Negative 假陰性:預測與負、實際爲正

TN、True Negative 真陰性:預測爲負、實際也爲負。

一致判真假,預測判陰陽。】

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fMgtZ4zJ-1589012804664)(D:\CSDN\pic\智能推薦系統\1589005985949.png)]

首先看真陽性:真陽性的定義是“預測爲正,實際也是正”,這個最好理解,就是指預測正確,是哪個類就被分到哪個類。對類A而言,TP的個位數爲2,對類B而言,TP的個數爲2,對類C而言,TP的個數爲1。

然後看假陽性,假陽性的定義是“預測爲正,實際爲負”,就是預測爲某個類,但是實際不是。對類A而言,FP個數爲0,我們預測之後,把1和2分給了A,這兩個都是正確的,並不存在把不是A類的值分給A的情況。類B的FP是2,"3"和"8"都不是B類,但卻分給了B,所以爲假陽性。類C的假陽性個數爲2。

最後看一下**假陰性,**假陰性的定義是“預測爲負,實際爲正”,對類A而言,FN爲2,"3"和"4"分別預測爲B和C,但是實際是A,也就是預測爲負,實際爲正。對類B而言,FN爲1,對類C而言,FN爲1。

真陰性就直接看的出:預測爲假,實際也爲假:A中TN爲5,B中4,C:5


準確率(Accuracy)

這三個指標裏最直觀的就是準確率: 模型判斷正確的數據(TP+TN)佔總數據的比例

Acc=(TP+TN)/(TP+TN+FP+FN)

召回率(Recall)

針對數據集中的所有正例(TP+FN)而言,模型正確判斷出的正例(TP)佔數據集中所有正例的比例.FN表示被模型誤認爲是負例但實際是正例的數據.召回率也叫查全率,以物體檢測爲例,我們往往把圖片中的物體作爲正例,此時召回率高代表着模型可以找出圖片中更多的物體!

Recall=TP/(TP+FN)

精確率(Precision):針對模型判斷出的所有正例(TP+FP)而言,其中真正例(TP)佔的比例.精確率也叫查準率,還是以物體檢測爲例,精確率高表示模型檢測出的物體中大部分確實是物體,只有少量不是物體的對象被當成物體

Precision=TP/(TP+FP)

區分好召回率和精確率的關鍵在於:針對的數據不同,召回率針對的是數據集中的所有正例,精確率針對的是模型判斷出的所有正例

通俗的說:精確率是計算我們預測出來的某類樣本中,有多少是被正確預測的。針對預測樣本而言。

召回率是 針對原先實際樣本而言,有多少樣本被正確的預測出來了。
送上我以前學習時的學渣筆記:
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

套用網上的一個例子:

某池塘有1400條鯉魚,300只蝦,300只鱉。現在以捕鯉魚爲目的。撒一大網,逮着了700條鯉魚,200只蝦,100只鱉。那麼,這些指標分別如下:

精確率 = 700 / (700 +200 + 100) = 70%

召回率 = 700 / 1400 =50%

可以吧上述的例子看成分類預測問題,對於“鯉魚來說”,TP真陽性爲700,FP假陽性爲300,FN假陰性爲700。

Precison=TP/(TP+FP)=700(700+300)=70%

Recall=TP/(TP+FN)=700/(700+700)=50%

將上述例子,改變一下:把池子裏的所有的鯉魚、蝦和鱉都一網打盡,觀察這些指標的變化。

精確率 = 1400 / (1400 +300 + 300) = 70%

召回率 = 1400 / 1400 =100%

TP爲1400:有1400條鯉魚被預測出來;FP爲600:有600個生物不是鯉魚類,卻被歸類到鯉魚;FN爲0,鯉魚都被歸類到鯉魚類去了,並沒有歸到其他類。

Precision=TP/(TP+FP)=1400/(1400+600)=70%

Recall=TP/(TP+FN)=1400/(1400)=100%

其實就是分母不同,一個分母是預測爲正的樣本數,另一個是原來樣本中所有的正樣本數。

F1-Score

F1分數(F1 Score),是統計學中用來衡量二分類模型精確度的一種指標。它同時兼顧了分類模型的精確率和召回率。F1分數可以看作是模型精確率和召回率的一種加權平均,它的最大值是1,最小值是0,它被定義爲精確率和召回率的調和平均數

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CLFaO1l0-1589012804672)(D:\CSDN\pic\智能推薦系統\20180510235023728)]

更一般的,我們定義Fβ分數爲:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-jl2XdWhz-1589012804674)(D:\CSDN\pic\智能推薦系統\201805102350568)]

除了F1分數之外,F0.5分數和F2分數,在統計學中也得到了大量應用,其中,F2分數中,召回率的權重高於精確率,而F0.5分數中,精確率的權重高於召回率。


上面說完了幾種常用的評價指標,我們再看看推薦系統的幾種類別

1.基於用戶的系統過濾算法

基於用戶的協同過濾算法主要包括兩個步驟:

1:找到和目標用戶興趣相似的用戶集合
2: 找到這個集合中用戶喜歡的、且目標用戶沒有聽過過的物品推薦給用戶

協同過濾算法主要利用用戶行爲的相似度計算用戶相似度。給定用戶u和用戶v,令分別表示用戶u、v曾經有過正反饋的物品集合,則可以通過以下兩種方式定義用戶的相似度:

  1. Jaccard

  2. 餘弦相似度

3.在	[外鏈圖片轉存失敗,源站可能防盜盜制,建議將圖片保存下來直接上傳可能有防盜鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將機制機制,建議將圖片保存下來直接上傳中.mg-NBNBB4pf4pB-1589012912777)(D:\CSDN\pic\智能推薦系統\15890059889012912594804676)(D:\CSDN\pic\智能推薦系統\1589012912786)(D:\CSDN\pic\智能推薦系統\1589095 589012912789)(D:\CSDN\pic\智能推薦系統\1589010456517.png)]

   得到用戶之間的相似度後,該算法會給用戶推薦和他興趣最相似的K個用戶喜歡的物品。如下的公式度量了目標用戶u對物品i的感興趣程度:
   
   其中,包含K個和用戶u興趣最接近的用戶,表示對物品i有過行爲的用戶集合,表示用戶u、v之間的興趣相似度,表示用戶v對物品i的興趣。

2.基於物品的協同過濾

用戶協同過濾的思想是計算用戶-用戶的相似度,物品協同過濾就是基於物品-物品相似度的推薦,先找到用戶喜歡過的物品最相似的物品列表,然後給用戶推薦這些物品。

相似度計算:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-UnLiEYO9-1589012804678)(D:\CSDN\pic\智能推薦系統\1589010456517.png)]

只不過這個物品-物品的相似度並不是直接計算得到的,而是通過喜歡物品一的用戶和喜歡物品二的用戶的交集來計算的,兩個物品相似是因爲它們出現在很多共同用戶的喜好列表中。

這裏面需要注意的是熱門物品和其他物品之間的相似度,理論上來說大多數用戶都可能會喜歡熱門物品,這樣就可能造成熱門物品-單個物品的相似度很高,所以需要適當的對熱門物品進行降權處理


3.基於模型的協同過濾

協同過濾有很多同胞兄弟,不同的側重,有不同的朋友~例如上述的基於物品和基於用戶的協同過濾等等,還有基於矩陣分解,基於關聯規則的等等,我主要是要涉獵基於機器學習,深度學習模型的推薦系統

以下文章來源

​ 基於模型的協同過濾作爲目前最主流的協同過濾類型,其相關算法可以寫一本書了,當然我們這裏主要是對其思想做有一個歸類概括。我們的問題是這樣的m個物品,m個用戶的數據,只有部分用戶和部分數據之間是有評分數據的,其它部分評分是空白,此時我們要用已有的部分稀疏數據來預測那些空白的物品和數據之間的評分關係,找到最高評分的物品推薦給用戶。

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

3.1 用關聯算法做協同過濾

一般我們可以找出用戶購買的所有物品數據裏頻繁出現的項集活序列,來做頻繁集挖掘,找到滿足支持度閾值的關聯物品的頻繁N項集或者序列。如果用戶購買了頻繁N項集或者序列裏的部分物品,那麼我們可以將頻繁項集或序列裏的其他物品按一定的評分準則推薦給用戶,這個評分準則可以包括支持度,置信度和提升度等。

常用的關聯推薦算法有Apriori,FP Tree和PrefixSpan。如果大家不熟悉這些算法,可以參考我的另外幾篇文章:

Apriori算法原理總結

FP Tree算法原理總結

PrefixSpan算法原理總結

3.2 用聚類算法做協同過濾

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

常用的聚類推薦算法有K-Means, BIRCH, DBSCAN和譜聚類,如果大家不熟悉這些算法,可以參考我的另外幾篇文章:

K-Means聚類算法原理

BIRCH聚類算法原理

DBSCAN密度聚類算法

譜聚類(spectral clustering)原理總結

3.3 用分類算法做協同過濾

如果我們根據用戶評分的高低,將分數分成幾段的話,則這個問題變成分類問題。比如最直接的,設置一份評分閾值,評分高於閾值的就是推薦,評分低於閾值就是不推薦,我們將問題變成了一個二分類問題。雖然分類問題的算法多如牛毛,但是目前使用最廣泛的是邏輯迴歸。爲啥是邏輯迴歸而不是看起來更加高大上的比如支持向量機呢?因爲邏輯迴歸的解釋性比較強,每個物品是否推薦我們都有一個明確的概率放在這,同時可以對數據的特徵做工程化,得到調優的目的。目前邏輯迴歸做協同過濾在BAT等大廠已經非常成熟了。

常見的分類推薦算法有邏輯迴歸和樸素貝葉斯,兩者的特點是解釋性很強。如果大家不熟悉這些算法,可以參考我的另外幾篇文章:

邏輯迴歸原理小結

樸素貝葉斯算法原理小結

3.4 用迴歸算法做協同過濾

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

常用的迴歸推薦算法有Ridge迴歸,迴歸樹和支持向量迴歸。如果大家不熟悉這些算法,可以參考我的另外幾篇文章:

線性迴歸原理小結

決策樹算法原理(下)

支持向量機原理(五)線性支持迴歸

3.5 用矩陣分解做協同過濾

用矩陣分解做協同過濾是目前使用也很廣泛的一種方法。由於傳統的奇異值分解SVD要求矩陣不能有缺失數據,必須是稠密的,而我們的用戶物品評分矩陣是一個很典型的稀疏矩陣,直接使用傳統的SVD到協同過濾是比較複雜的。

目前主流的矩陣分解推薦算法主要是SVD的一些變種,比如FunkSVD,BiasSVD和SVD++。這些算法和傳統SVD的最大區別是不再要求將矩陣分解爲UΣV**T

的形式,而變是兩個低秩矩陣

的乘積形式。對於矩陣分解的推薦算法,後續我會專門開篇來講。

3.6 用神經網絡做協同過濾

用神經網絡乃至深度學習做協同過濾應該是以後的一個趨勢。目前比較主流的用兩層神經網絡來做推薦算法的是限制玻爾茲曼機(RBM)。在目前的Netflix算法比賽中, RBM算法的表現很牛。當然如果用深層的神經網絡來做協同過濾應該會更好,大廠商用深度學習的方法來做協同過濾應該是將來的一個趨勢。後續我會專門開篇來講講RBM。

3.7 用圖模型做協同過濾

用圖模型做協同過濾,則將用戶之間的相似度放到了一個圖模型裏面去考慮,常用的算法是SimRank系列算法和馬爾科夫模型算法。對於SimRank系列算法,它的基本思想是被相似對象引用的兩個對象也具有相似性。算法思想有點類似於大名鼎鼎的PageRank。而馬爾科夫模型算法當然是基於馬爾科夫鏈了,它的基本思想是基於傳導性來找出普通距離度量算法難以找出的相似性。後續我會專門開篇來講講SimRank系列算法。

3.8 用隱語義模型做協同過濾

隱語義模型主要是基於NLP的,涉及到對用戶行爲的語義分析來做評分推薦,主要方法有隱性語義分析LSA和隱含狄利克雷分佈LDA,這些等講NLP的再專門講。

4. 協同過濾的一些新方向

當然推薦算法的變革也在進行中,就算是最火爆的基於邏輯迴歸推薦算法也在面臨被取代。哪些算法可能取代邏輯迴歸之類的傳統協同過濾呢?下面是我的理解:

a) 基於集成學習的方法和混合推薦:這個和混合推薦也靠在一起了。由於集成學習的成熟,在推薦算法上也有較好的表現。一個可能取代邏輯迴歸的算法是GBDT。目前GBDT在很多算法比賽都有好的表現,而有工業級的並行化實現類庫。

b)基於矩陣分解的方法:矩陣分解,由於方法簡單,一直受到青睞。目前開始漸漸流行的矩陣分解方法有分解機(Factorization Machine)和張量分解(Tensor Factorization)。

c) 基於深度學習的方法:目前兩層的神經網絡RBM都已經有非常好的推薦算法效果,而隨着深度學習和多層神經網絡的興起,以後可能推薦算法就是深度學習的天下了?目前看最火爆的是基於CNN和RNN的推薦算法。

5. 協同過濾總結

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

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


​ 推薦系統比較全面,多的都可以單獨出書了,很多大學也開暫未這門課,不過隨着大數據時代的來臨,越來越多像我一樣的前輩涉獵,慢慢精通,各大學院也紛紛開設,各大電商平臺也紛紛使用,研究,創新不同的推薦系統算法,我作爲一個初學者並且我還在本科大二在讀,有着大量的涉獵時間,平常比較自律,所以奔着機器學習,深度學習方向涉獵一下推薦系統提高一下水平,我還會寫大大小小數幾十篇推薦系統的文章,在我接觸後,我秉持七分實戰三分理論的原則,慢慢做一些基礎的,實戰的項目送上,還希望朋友們關注一下小弟的博客,一起學習!

最後邀請大家一同進入我的機器&深度學習交流羣!話不多說,下期見~

在這裏插入圖片描述

上海第二工業大學 智能科學與技術 大二 周小夏(CV調包俠)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章