1. 程式人生 > >邏輯迴歸,決策樹,支援向量機 選擇方案

邏輯迴歸,決策樹,支援向量機 選擇方案

邏輯迴歸 vs 決策樹 vs 支援向量機

分類是我們在工業界經常遇到的場景,本文探討了3種常用的分類器,邏輯迴歸LR,決策樹DT和支援向量機SVM。

這三個演算法都被廣泛應用於分類(當然LR,DT和SVR也可以用於迴歸,但是本文先不討論)。我經常看到人們會問,這個問題我該使用LR呢還是決策樹(或者GBDT)還是SVM呢。然後你會聽到一個“經典”而且“絕對正確”的答案:”It depends.”這個答案簡直毫無卵用。所以本文將探討一下面臨模型選擇的時候到底depends on what。

接下來是一個簡單的2-D的解釋,至於向更高維度的擴充套件延伸,就靠你們了~

從最重要的問題入手:我們在分類時想要做什麼~聽起來很蠢有木有,重新組織一下問題~為了完成分類,我們嘗試得到一個分類邊界或者是一個你和曲線,哪個方式能夠在我們的特徵空間裡更好的進行分類呢?

特徵空間聽起來很fancy,看一個簡單的例子,我有一些樣本資料,特徵(x1,x2)和標籤(0或1)。
image

可以看到我們的特徵是2-D的,不同的顏色代表著不同的類別標籤,我們想要使用演算法來獲得一個曲線來區分這些不同類別的樣本。

其實可以很直觀的看出來,這個場景下圓是一個比較理想的分類邊界。而不同的分類邊界也就是LR,DT和SVM的區別所在。

首先看一下邏輯迴歸,對於LR給出的決策邊界,我們對於這個經典的S型曲線會有不少困惑:
image

其實這個藍色的曲線並不是決策邊界,它只是把二分類的答案使用連續值輸出置信度的一個方式,例如給出分類結果為1的置信度。LR決策面其實是一條直線( 高維情況下平面或超平面

),為什麼呢?

來看下邏輯迴歸的公式:

image

為了判定樣本屬於哪一類,需要設定一個截斷分數,高於這個分數就預測為正例,低於這個分數就預測為負例。例如階段分數是c,所以我們的決策過程如下:

Y=1 當 p>c,否則為0。因而解決了之前的一個問題:LR的決策邊界其實是一條直線。

所以對於之前的資料集我們得到的LR的決策邊界如下:
image

可以看出來LR的效果並不好,因為不管你怎麼調,決策邊界都是線性的,無法擬合出來一個圓形的決策邊界,所以LR比較適合解決線性可分的問題(雖然你也可以通過對特徵進行變換從而使樣本資料線性可分,但是目前不討論這個東西,這個是特徵工程的工作,和模型沒關係

)。

現在看一下決策樹的工作原理,決策樹是按照單個變數進行一層一層的規則過濾,例如:
image

x1大於或小於const或者x2大於或小於某個const做的工作是使用直線來劃分特徵空間,如下圖:
image

如果我們讓決策樹更復雜一點,例如深度更大,則這些判斷條件能夠更細地劃分特徵空間,從而越來越逼近那個圓形的決策邊界。
image

因此,如果決策邊界是非線性的,而且能夠通過矩形來劃分特徵空間,那麼決策樹就是優於LR的模型。

最後,看一下SVM的工作模式,SVM通過核函式把特徵空間對映到其他維度,從而使得樣本資料線性可分,換個說法,SVM通過新增新的維度的特徵從而使得樣本線性可分。從下圖可以看到,當把特徵對映到另一個空間,那麼一個決策面可以把資料區分開,換言之,如果把這個決策面對映到初始特徵空間,我們就相當於得到了一個非線性的決策邊界。
image

在原始的2-D的特徵基礎上新增一個新的特徵,我們就可以通過一個平面,使得這個3-D的樣本資料線性可分了(使用n-1維的超平面把n維的樣本分開),如果把這個分類面投射到原始的2-D空間,那麼其實我們會得到一個圓哦,雖然這個分類邊界並不會像下圖這樣理想,但是也是能夠逼近這個圓的。
image

到這裡我們大致明白了3個模型的工作原理,但是一開始提出的問題並沒有解決,it depends on what? 什麼情況下使用什麼模型,優勢是什麼,劣勢又是什麼?我們下面來探討這個問題~

LR,DT,SVM都有自身的特性,首先來看一下LR,工業界最受青睞的機器學習演算法,訓練、預測的高效效能以及演算法容易實現使其能輕鬆適應工業界的需求。LR還有個非常方便實用的額外功能就是它並不會給出離散的分類結果,而是給出該樣本屬於各個類別的概率(多分類的LR就是softmax),可以嘗試不同的截斷方式來在評測指標上進行同一模型的效能評估,從而得到最好的截斷分數。LR不管是實現還是訓練或者預測都非常高效,很輕鬆的handle大規模資料的問題(同時LR也很適合online learning)。此外,LR對於樣本噪聲是robust的,對於“mild”的多重共線性問題也不會受到太大影響,在特徵的多重共線性很強的情況下,LR也可以通過L2正則化來應對該問題,雖然在有些情況下(想要稀疏特徵)L2正則化並不太適用。

但是,當我們有大量的特徵以及部分丟失資料時,LR就開始費勁了。太多的分類變數(變數值是定性的,表現為互不相容的類別或屬性,例如性別,年齡段(1,2,3,4,5)等)也會導致LR的效能較差(這個時候可以考慮做離散化,其實肯定是要做離散化的)。還有一種論調是LR使用所有的樣本資料用於訓練,這引發了一個爭論:明顯是正例或者負例的樣本(這種樣本離分類邊界較遠,不大會影響分類的curve)不太應該被考慮太多,模型理想情況是由分類邊界的樣本決定的(類似SVM的思想),如下圖。還有一個情況就是當特徵是非線性時,需要做特徵變換,這可能會導致特徵維度急劇上升。下面是我認為的LR的一些利弊:

LR的優勢:

  1. 對觀測樣本的概率值輸出
  2. 實現簡單高效
  3. 多重共線性的問題可以通過L2正則化來應對
  4. 大量的工業界解決方案
  5. 支援online learning(個人補充

LR的劣勢

  1. 特徵空間太大時表現不太好
  2. 對於大量的分類變數無能為力
  3. 對於非線性特徵需要做特徵變換
  4. 依賴所有的樣本資料(作者認為這其實不是啥問題。。

image

接下來我們聊一下決策樹和SVM。

決策樹對於單調的特徵變換是”indifferent”的,也就是說特徵的單調變換對於決策樹來說不會產生任何影響(我本人最早使用決策樹時沒有理解內部的機制,當時還做了特徵歸一化等工作,發現效果沒有任何變化),因為決策樹是通過簡單的使用矩形切分特徵空間的,單調的特徵變換隻是做了特徵空間的縮放而已。由於決策樹是的分支生成是使用離散的區間或類別值的,所以對於不管多少分類變數都能夠輕鬆適應,而且通過決策樹生成出來的模型很直觀而且容易解釋(隨著決策樹的分支解釋即可),而且決策樹也可以通過計算落到該葉子類目的標籤平均值獲得最終類別的概率輸出。但是這就引發了決策樹的最大問題:非常容易過擬合,我們很容易就會生成一個完美擬合訓練集的模型,但是該模型在測試集合上的表現卻很poor,所以這個時候就需要剪枝以及交叉驗證來保證模型不要過擬合了。

過擬合的問題還可以通過使用隨機森林的方式來解決,隨機森林是對決策樹的一個很smart的擴充套件,即使用不同的特徵集合和樣本集合生成多棵決策樹,讓它們來vote預測樣本的標籤值。但是隨機森林並沒有像單純決策樹一樣的解釋能力。

Also by decision trees have forced interactions between variables , which makes them rather inefficient if most of your variables have no or very weak interactions. On the other hand this design also makes them rather less susceptible to multicollinearity.

這段是在說決策樹也不會受到多重共線性的影響,但是我本人不是很理解

DT的優勢:

  1. 直觀的決策過程
  2. 能夠處理非線性特徵
  3. 考慮了特徵相關性

DT的劣勢

  1. 極易過擬合(使用RF可以一定程度防止過擬合,但是隻要是模型就會過擬合!)
  2. 無法輸出score,只能給出直接的分類結果

image

最後談一下支援向量機SVM,SVM最大的好處就是它只依賴於處於分類邊界的樣本來構建分類面,可以處理非線性的特徵,同時,只依賴於決策邊界的樣本還可以讓他們能夠應對”obvious”樣本缺失的問題。由於SVM能夠輕鬆搞定大規模的特徵空間所以在文字分析等特徵維度較高的領域是比較好的選擇。SVM的可解釋性並不像決策樹一樣直觀,如果使用非線性核函式,SVM的計算代價會高很多。

SVM的優勢:

  1. 可以處理高維特徵
  2. 使用核函式輕鬆應對非線的性特徵空間
  3. 分類面不依賴於所有資料

SVM的劣勢:

  1. 對於大量的觀測樣本,效率會很低
  2. 找到一個“合適”的核函式還是很tricky的

我總結出了一個工作流程來讓大家參考如何決定使用哪個模型:
1. 使用LR試一把總歸不會錯的,至少是個baseline
2. 看看決策樹相關模型例如隨機森林,GBDT有沒有帶來顯著的效果提升,即使最終沒有用這個模型,也可以用隨機森林的結果來去除噪聲特徵
3. 如果你的特徵空間和觀測樣本都很大,有足夠的計算資源和時間,試試SVM吧,

最後是這位老司機的一點人生經驗:好的資料遠比模型本身重要,記住一定要使用你在對應領域的知識來進行完備的特徵工程的工作;然後還有一個有效途徑就是多使用ensembles,就是多個模型混合,給出結果。

個人想法:

本文加粗或者斜體字都是我自己的觀點和補充。本文提到了多重共線性和正則化,如果不知道這個的話,是無法很好的理解這些內容的,我後面會寫文章總結介紹一下多重共線性以及正則化相關的內容~