決策樹是如何選擇特徵和分裂點?

©PaperWeekly 原創 · 作者|賁忠奇

單位|便利蜂算法工程師

研究方向|推薦算法、反作弊

緣起

在解決迴歸和分類問題的時候,一般會使用 Random Forest、GBDT、XGBoost、LightGBM 等算法,這類算法因爲性能好,被業界廣泛採用。突然想到樹類型的算法都需要明白一個基本問題,樹是如何選擇特徵和分裂點的?其根本要追溯到決策樹的種類,每種是如何劃分特徵和分裂點,以及如何剪枝的。

決策樹分爲三類:ID3、C4.5、CART。提出時間卻是 1984 年提出 CART,1986年提出的 ID3,1993 年提出的 C4.5。在介紹決策樹之前需要了解一些信息論的知識,信息、熵、條件熵、信息增益。決策樹中的 ID3 和 C4.5 與信息論息息相關。

信息論基礎

信息是雜亂無章數據的一種度量方式。在分類問題中,如果待分類的事物可以劃分在多個分類中,那麼某個分類 的信息定義爲:


其中, 是某個分類的信息; 是選擇該分類的概率。

熵是信息的期望,也就是計算所有分類包含信息的期望值:

其中,H(Y) 表示分類數據集的熵。

條件熵是在特徵 X 給定條件下,類別 Y 的條件概率分佈的熵對特徵 X 的數學期望。

其中, 表示在特徵 X 下的條件熵; 表示特徵下 具體特徵值的條件熵; 表示 x 和 y 的聯合概率分佈。

在劃分數據集之前之後信息發生的變化叫做信息增益,信息增益是熵的減少或者說是數據無序程度的減少。熵減去條件熵就是信息增益。

其中, 表示信息增益。

數據說明

在講完一些信息論的基礎知識的基礎上,由於原始論文中公式的表示不是同一個體系,爲了更加方便理解這三者,因此下文中三個算法的介紹都以下面數據集爲基礎。

訓練數據集 , 表示訓練樣本總數,數據共有 個類別,類別 的樣本集合分別用 表示,那麼 ,如果特徵A有n個不同類型的取值分別爲 ,特徵 A 可以將 D 劃分爲 n 個子集, , 爲 的樣本個數,並且 ,子集 屬於類別 的樣本集合爲 , 即爲子集 中屬於類別 的樣本集合: 。用 表示 集合樣本的個數。

ID3

4.1 算法思路

利用訓練數據集 D 與特徵 A 來表示信息增益的計算方式,那麼需要以下幾個步驟:

1)計算訓練集合 的熵 :

當 H(D) 的值越小,說明樣本集合 D 的純度就越高。

2)選擇用樣本的某一個特徵 A 來劃分樣本集合 D 時,就可以得出特徵 A 對樣本 D 劃分所帶來的信息增益。特徵 A 把 D 劃分爲 n 個子集,計算特徵 A 對數據集 D 的條件熵 H(D|A):

3)計算信息增益 IG:

信息增益越大,說明用特徵 A 來劃分數據集 D,信息混亂程度越小。我們需要對樣本的所有特徵計算信息增益情況,選擇信息增益大的特徵來作爲決策樹的一個結點,或者可以說那些信息增益大的特徵往往離根結點越近。

當一個特徵已經作爲劃分的依據,在下面遞歸過程就不在參與了。經過根結點下面特徵各個取值後樣本又可以按照相應特徵值進行劃分,並且在當前的樣本下利用剩下的特徵再次計算信息增益來進一步選擇劃分的結點,ID3 決策樹就是這樣建立起來的。

4.2 決策樹生成過程

大概創建分支 createBranch() 僞代碼的意思如下:

檢測數據集中的每個子項是否屬於同一分類:

  if so return 類標籤
  else
   尋找劃分數據集的最好特徵
   劃分數據集
   創建分支節點
      for每個劃分的子集
        調用函數createBranch並增加返回結果到分支節點中
   retrun 分支節點

也就是說,遍歷每一個特徵,遍歷每一個特徵值,如果計算出來信息增益最大,那麼該特徵就是最佳特徵;接下來每個特徵和特徵值遞歸調用,構建下面的子樹,再次選取特徵和特徵值,直到劃分的子項屬於同一類別或者遍歷完所有特徵,返回出現次數最多的類別。

4.3 示例

選用原始論文中的一個示例:

假設有兩個分類,一個是 N,一個是 P,Outlook 表示天氣情況,Temperature 表示氣溫情況,Humidity 表示溼度,Windy 表示有風,這四個作爲特徵,每個特徵下面的離散值作爲特徵值。那麼數據的熵 :

在 Outlook 的值 sunny 中 P 出現了 2 次,N 出現了 3 次,因此 ,那麼數據集在 sunny 下的熵表示爲 同理:在 overcast 下 ;在 rain 下 。那麼數據集 D 在 Outlook 特徵的條件熵表示爲:

那麼 outlook 的信息增益表示爲:

同理其他特徵的信息增益結果爲:

可以發現 Outlook 的信息增益最大,優先在這個特徵上劃分,在遞歸到其他特徵上最終形成的決策樹圖如下: 


C4.5

ID3 算法中當一個特徵的可取值數目較多時,而對應的特徵值下面的的樣本很少,這個時候它的信息增益是非常高的。ID3 會認爲這個特徵很適合劃分,但是較多取值的特徵來進行劃分帶來的問題是它的泛化能力比較弱,不能夠對新樣本進行有效的預測。爲了解決這個問題,C4.5 決策樹不直接使用信息增益來作爲劃分樣本的主要依據,採用信息增益率來劃分樣本。

特徵 A 對訓練數據集合D的信息增益比 定義爲特徵 A 的信息增益 IG(D,A) 與訓練數據集 D 關於特徵 A 的取值熵 之比,即:

如果特徵 A 有 n 個取值,則其中數據集 D 關於特徵 A 的熵爲:

上面的過程相當於對特徵值多的特徵做了一個歸一化,校正信息增益容易偏向於取值較多的特徵的問題。但是同樣增益率對可取值數目較少的特徵有所偏好,因此 C4.5 決策樹先從候選劃分屬性中找出信息增益高於平均水平的特徵,在從中選擇增益率最高的。關於 C4.5 的剪枝問題,在 CART 樹中一併介紹。

CART樹

ID3 和 C4.5 需要把連續特徵離散化才能在迴歸數據中使用(ID3 需要人工處理,C4.5 算法自帶處理);使用熵來度量信息的混亂程度還是複雜了些;最佳特徵取值可以是多個,切分成複雜的多叉樹。由於他們存在一些問題,下面還有一種決策樹模型,CART 樹。雖然 ID3 和 C4.5 存在很多問題,但是我不認爲 CART 樹是爲了解決這些問題的,因爲 CART 論文是發表的最早的,這邊只是爲了介紹他們對比不同。

CART(Classification And Regression Trees,分類迴歸樹),採用二元切分的方法,如果數據切分特徵值等於切分要求進入左子樹,否則進入右子樹。CART 樹即可以處理分類問題,又可以處理迴歸問題。分類問題採用基尼係數來選擇最優特徵和分裂點,迴歸問題採用平方誤差的總值(總方差)來選擇最優特徵和分裂點。

6.1 CART數據集混亂程度衡量

6.1.1 CART分類樹

基尼指數是 1912 年意大利統計與社會學家 Corrado Gini 提出的。基尼係數(Gini index、Gini Coefficient)用來衡量一個國家或地區居民收入差距的指標,值越大表示收入越懸殊。在 CART 分類樹中,採用基尼係數衡量數據集的不純度(混亂程度),基尼係數越小說明數據不純度低,特徵越顯著。

那麼分類數據集 D 的基尼係數可以表示爲:

在特徵A下,將數據劃分成兩類,一類是 ,一類是 ,那麼在特徵 A 下的基尼係數爲:

6.1.2 CART迴歸樹

計算迴歸數據真實目標值中所有數據的均值,每條數據真實目標值減去均值。使用差值的絕對值或者差值的平方來衡量回歸數據的混亂程度。若果採用差值的平方來衡量,那麼就是平方誤差的總值(總方差)。

6.2 樹的生成過程

函數 createTree() 的僞代碼大致如下:

找到最佳的待切分特徵:    
  如果該節點不能再分,將該節點存爲葉節點    
  執行二元切分    
  在右子樹調用createTree()方法    
  在左子樹調用createTree()方法    

那麼如何找到最佳的待切分特徵和特徵值呢?   

每個特徵:    
  每個特徵值:    
    將數據切分成兩份    
    計算切分的誤差    
    如果當前誤差小於當前最小誤差,那麼將當前切分設定爲最佳切分並更新最小誤差    
返回最佳切分的特徵和特徵值

如果是分類樹,那麼誤差指的的基尼係數,如果是迴歸樹,誤差值的是總方差。節點不能再分有兩種情況:一是切分後的數據真實目標值爲同一個,那麼此時葉節點就是當前值;二是預剪枝切分後的樣本很少或者迭代時總誤差下降不滿足閾值,此時用切分後的數據真實值的平均值作爲葉節點。

6.3 樹的剪枝

樹的剪枝分爲預剪枝和後剪枝,一般爲了尋求模型的最佳效果可以同時使用兩種剪枝技術。


預剪枝過程相對簡單,在生成樹的過程中,如果某個特徵和特徵值切分的樣本小於最小樣本數或迭代誤差下降值小於設置的最小下降值,就停止切分。預剪枝可以降低過擬合的風險並減少決策樹的訓練時間,但是也會帶來欠擬合的問題。

下面重點講後剪枝,訓練集訓練一個決策樹。在驗證集上,對於一顆子樹 ,其損失函數爲:

其中, 爲正則化參數, 爲驗證集的預測誤差, 是子樹 T 葉節點的數量。

如果將 T 的子樹減掉,那麼損失函數爲:

如果剪枝後損失函數變小,或者損失函數相等但是葉節點的數量變少,這兩種情況都滿足剪枝條件,具體後剪枝過程如下:

基於已有的樹切分驗證集數據:
  如果存在任一子集是一棵樹,則在該子集遞歸剪枝過程
  計算將當前兩個葉節點合併後的誤差
  計算不合並的誤差
  如果合併會降低誤差的話,就將葉節點合併


決策樹算法小結

在樣本量比較小的情況下建議使用 C4.5,大樣本的情況下使用 CART。C4.5 需要對數據進行多次排序,處理成本耗時較高;CART 樹是一種大樣本的統計方法,小樣本處理下泛化誤差較大。


目前這三種算法都是一棵樹中的特徵來決定最後的結果,後來發展成一組樹來決定最後的結果。如果這些樹是並行投票,就是每個樹的投票權重相同,形成了 bagging 類的算法,最有代表性的是 Random Forest;如果這些樹是串行投票,每個樹的投票權重不同,通過擬合殘差的方式,形成了 boosting 類的算法,最有代表性的是 GBDT、XGBoost、LightGBM。

參考文獻

[1] Leo Breiman, Jerome H. Friedman, Richard A. Olshen, Charles J. Stone.(1984).
[2] Classification And Regression Trees Quinlan1986_Article_InductionOfDecisionTrees
[3] C4.5: by J. Ross Quinlan. Inc., 1993. Programs for Machine Learning Morgan Kaufmann Publishers
[4]《機器學習實戰》
[5] https://www.cnblogs.com/pinard/p/6053344.html
[6] 周志華西瓜書《機器學習》





更多閱讀

#投 稿 通 道#

 讓你的論文被更多人看到 

如何才能讓更多的優質內容以更短路徑到達讀者羣體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。

總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成爲一座橋樑,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。 

PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得技術乾貨。我們的目的只有一個,讓知識真正流動起來。

???? 來稿標準:

• 稿件確係個人原創作品,來稿需註明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向) 

• 如果文章並非首發,請在投稿時提醒並附上所有已發佈鏈接 

• PaperWeekly 默認每篇文章都是首發,均會添加“原創”標誌

???? 投稿郵箱:

• 投稿郵箱:[email protected] 

• 所有文章配圖,請單獨在附件中發送 

• 請留下即時聯繫方式(微信或手機),以便我們在編輯發佈時和作者溝通

????

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

關於PaperWeekly

PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公衆號後臺點擊「交流羣」,小助手將把你帶入 PaperWeekly 的交流羣裏。

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