目錄
1.引言
決策樹(decision tree)是一種分類與迴歸的方法,顧名思義,決策樹呈樹形結構,可以認爲是if-then規則的集合,也可以認爲是特徵空間與類空間上的條件概率分佈。
主要的優點:分類速度快、可讀性強。
決策樹學習通常有三個步驟:特徵選擇、決策樹生成和決策樹修剪。
常用的決策樹算法有:ID3算法、C4.5算法和CART算法,其中CART更是被廣泛應用。
2.決策樹
定義:分類決策樹模型是一種描述對實例進行分類的屬性結構。決策樹由結點和向邊組成。結點有兩種類型:內部結點和葉結點。內部結點表示一個特徵或者屬性,葉結點表示一個類。
例如上圖,圓形是內部結點,表示特徵和屬性,矩形表示葉子結點,表示一個類。訓練的時候,按照訓練數據集的屬性和類,逐漸構建一個樹,分類的時候,從根結點按照遞歸的方法對內部結點的屬性進行測試和匹配,直到到達葉結點。
2.1 決策樹與if-then規則
可以認爲決策樹是if-then規則的集合,其中內部結點之間連城的通路,構建成一條規則。路徑上的點是規則的條件,葉子結點則是規則的結論。每一個實例都被一條路徑或者一條規則覆蓋,而且只被一條路徑或規則覆蓋。
2.2 決策樹與條件概率分佈
決策樹還可以認爲是特徵條件下類的條件概率分佈。將特徵空間劃分爲互不相交的單元或區域,並在每個單元定義一個類的概率分佈。而決策樹的一條路徑就是一個單元,因此可以認爲決策樹是給定條件下類的概率分佈的集合。
2.3 決策樹學習
給定訓練集,其中,n是特徵個數;是類的標記。
決策樹的目的就是根據訓練數據集構建一個決策樹模型,使它能夠對實例進行正確分類。
所以決策樹的本質就是從訓練數據中歸納出一組分類規則,這樣決策樹可能有很多個,也可能一個沒有。但是我們需要的是一個與訓練數據矛盾較小的決策樹,又要具有很好的泛化能力,不僅對訓練數據有很好的擬合,對未知數據又有很好的預測。
決策樹學習使用損失函數作爲自己的目標函數,學習的策略就是最小化損失函數。決策樹學習的算法通常是一個遞歸選擇最優特徵的方法,根據特徵對訓練數據進行分割,使各個子數據有一個最好的分類過程。這一個過程也是對特徵空間的劃分,也對應着決策樹的構建。從根結點開始,選擇特徵作爲自己的內部結點,遞歸構建,直到每個子集都被分到葉子結點上(即都有明確的分類),這就完成類決策樹的構建。
3.特徵選擇
在構建決策樹的時候,可以構建許多決策樹,哪種決策樹纔是最有效的決策樹?在開始構建的時候就考慮這個問題。要想構建一個高效的決策樹,一般(CART除外)需要遵守信息增益或信息增益比的規則(點此查看信息熵、信息增益、信息增益比原理)。一般我們選擇信息增益或信息增益比最大的特徵作爲當前的特徵。信息增益體現出了特徵與類的關聯程度,即特徵對類的不確定度的影響程度,信息增益比則是對這種程度的修正,避免決策樹偏向選擇取值較多的特徵。
舉一個例子:下表是貸款申請情況表,最後一列給出類是否給予貸款。
我們要從這表中構建一個決策樹,怎樣選擇特徵作爲節點呢?
所以需要計算類的信息熵、特徵與類的信息增益、信息增益比。
如下圖,通過計算得到房子的信息增益最大(0.420),要是以信息增益爲特徵條件,那麼構建決策樹的第一個節點(根結點)應該是“房子”這個特徵。(此處有詳細的計算過程:信息熵、信息增益、信息增益比原理)
如下圖,計算得到信息增益比,同樣特徵“房子”的信息增益比最大(0.4325),當以信息增益比爲選擇條件的時候,特徵“房子”應該作爲第一個節點(根結點)
4.決策樹生成
4.1 ID3生成算法
ID3算法的核心就是在決策樹各個節點上使用信息增益作爲選擇特徵的準則,使用遞歸方法構建決策樹。
輸入:訓練數據集D,特徵集A和閾值
輸出:決策樹T
- 若D中所有實例屬於同一類,則T爲單結點樹,並將類作爲該結點的類標記,返回T;
- 若,則T爲單結點樹,將D中實例樹最大的類作爲該結點的類標記,返回T;
- 否則信息增益算法計算A中各特徵對D的信息增益,選擇信息增益最大的特徵;
- 如果的信息增益小於閾值,則置T爲單結點樹,並將D中實例數最大的類作爲該結點的類標記,返回T;
- 否則,對的每一個可能的值,依照=將D分割爲若干個非空子集,將中實例樹最大的類作爲標記,構建子節點,由結點及其子節點構成樹T,返回T;
- 對第i個子節點,以爲訓練集,以爲新的特徵集,遞歸調用1~5,得到樹T,返回T。
以上一個案例爲爲例:
作爲特徵“年齡”,作爲特徵“工作”,作爲特徵“房子”,作爲特徵“信貸”。在上一步的計算中,可以知道特徵的信息增益最大,所以選擇作爲根結點的特徵。它把數據集劃分爲兩個子集(取是)和(取否)。由於只有同一類的樣本點,所以單獨成爲一個葉子結點,結果類標記“是”。
則下面對從特徵、和中選擇新的特徵,計算各個特徵的信息增益:
從上圖,可以看到信息增益最大,因此作爲新的內部結點。
從引出兩個節點,即將數據集劃分成兩個(取是)和(取否)。由於內的類屬於同一類,且類標記爲“是”,故此數據集爲葉子結點,且標記爲“是”;內的類也是屬於同一類,故此數據集爲葉子結點,且類標記爲“否”。這樣就生成了一個決策樹(下圖),僅僅使用了兩個特徵,使決策樹更加高效。
4.2 C4.5生成算法
ID3算法生成樹有一個缺點,就是容易過擬合。爲此C4.5算法對ID3算法進行改進,使用信息增益比作爲選擇特徵的條件。
輸入:訓練數據集D,特徵集A和閾值
輸出:決策樹T
- 若D中所有實例屬於同一類,則T爲單結點樹,並將類作爲該結點的類標記,返回T;
- 若,則T爲單結點樹,將D中實例樹最大的類作爲該結點的類標記,返回T;
- 否則信息增益算法計算A中各特徵對D的信息增益比,選擇信息增益比最大的特徵;
- 如果的信息增益小於閾值,則置T爲單結點樹,並將D中實例數最大的類作爲該結點的類標記,返回T;
- 否則,對的每一個可能的值,依照=將D分割爲若干個非空子集,將中實例樹最大的類作爲標記,構建子節點,由結點及其子節點構成樹T,返回T;
- 對第i個子節點,以爲訓練集,以爲新的特徵集,遞歸調用1~5,得到樹T,返回T。
以上一個爲例,計算信息增益比:
作爲特徵“年齡”,作爲特徵“工作”,作爲特徵“房子”,作爲特徵“信貸”。如下圖,可以知道的信息增益比最大,因此選擇作爲根結點。它把數據集劃分爲兩個子集(取是)和(取否)。由於只有同一類的樣本點,所以單獨成爲一個葉子結點,結果類標記“是”。
則下面對從特徵、和中選擇新的特徵,計算各個特徵的增益比:
從上圖,可以看到信息增益比最大,因此作爲新的內部結點。
從引出兩個節點,即將數據集劃分成兩個(取是)和(取否),由於內的類屬於同一類,且類標記爲“是”,故此數據集爲葉子結點,且標記爲“是”;內的類也是屬於同一類,故此數據集爲葉子結點,且類標記爲“否”。
這樣就生成了一個決策樹,在這個案例中,C4.5和ID3生成的決策樹是一樣的,但是規則上有細微的區別——特徵條件不同。
5.決策樹剪枝
ID3和C4.5算通過遞歸產生決策樹,直到不能繼續。這樣產生的樹往往對訓練數據分類很準確,但是對未知的測試數據的分類卻沒有那麼準確——過擬合。因此需要通過剪枝,對已經生成的樹進行簡化,增加決策樹的魯棒性。
顧名思義,剪枝,就是裁掉一些已經生成的子樹或者葉子結點,將其父結點或者根結點作爲新的葉結點,從而簡化了分類樹模型。
決策樹剪枝通過極小化整體損失函數或代價函數實現。
設樹T的葉結點個數爲,t是樹T的葉結點,該結點有個樣本點,其中k類的樣本點有個,爲葉結點t上的經驗熵,是參數。則決策樹學習的損失函數爲:
其中經驗熵爲:,
將損失函數的右邊第一項記做,這是損失函數變成。
當較大時,最優樹偏小;
較小的時候,最優樹偏大;
,根結點組成的單結點最優;
,整個樹是最優的。
決策樹的生成只考慮了通過提高信息增益或信息增益比來訓練數據,這樣使模型對訓練數據有很好的擬合效果,對未知數據的分類效果不是十分好。剪枝,通過優化損失函數,減小模型複雜度,學習整體最好表現。
剪枝,就是當確定時,選擇損失函數最小的模型,即損失函數最小的子樹。
5.1剪枝算法
輸入:生成算法產生的決策樹T,參數;
輸出:修剪後的子樹。
- 計算每個節點的經驗熵
- 遞歸地從樹的葉結點向上回溯。設一組葉結點回到其父結點,之前之後整體樹分別爲和,對應的損失函數分別是和,如果:,則進行剪枝,將父結點變爲新的葉結點。
- 返回2,直到不能繼續剪枝爲止,得到損失函數最小的子樹
決策樹的剪枝是在局部進行的,所以決策樹剪枝可以由動態規劃算法實現。
6.CART算法
CART(classififcation and regression trees)是一種既可以分類(離散)也可以迴歸(連續)的決策樹。CART只假設決策樹是二叉樹,因此CART最終生成的樹形結構是二叉樹。
6.1 CART迴歸樹生成樹
假設X與Y是輸入和輸出變量,並且Y是連續的,給定訓練數據集。將輸入控件劃分爲M個單元,於是迴歸樹模型可以表示爲:
當輸入空間事先知道時,使用平方誤差作爲迴歸樹的預測誤差。
採用啓發式方法,選擇第個變量作爲分類點,取他的值s,把輸入數據切分成兩部分(輸入小於s)和(輸入大於s)。
然後尋找最優切分變量和最優切分點即可。
6.2 最小二乘法迴歸樹
按照6.1方法生成的迴歸樹就是最小二乘迴歸樹(二叉樹)。
輸入:訓練數據集
輸出:迴歸樹
- 選擇最優切分變量和切分點,求解損失,找到損失最小的和切分點。
- 用選定的(j,s)劃分區域(輸入小於s)和(輸入大於s),並決定輸出值
- 繼續對兩個區域調用步驟1和2,直到滿足停止條件。
- 將輸入空間劃分爲M個子區域,生成決策樹:
繼續以上一個案例爲例,如何使用最小二乘迴歸樹來構建決策樹。
首先是挨個特徵計算,找到損失函數最小的特徵。從第一輪結果中可知道的損失最小(3),因此選擇“房子”作爲根結點,將數據劃分成兩部分。左邊是,由於中的數據全爲一類,因此爲一個葉結點。右邊是,對其內的特徵繼續計算損失函數,即第二輪計算。
從結果中可以看到,的損失值爲0,因此可以直接停止後續計算,確定“工作”爲新的節點。將數據分成兩部分:和。其中數據爲一類,所以是葉子結點。同理也是葉子結點。這就生成了一個歸回二叉決策樹。
6.3 CART分類樹生成
分類樹是使用基尼指數作爲特徵選擇,同時決定這個特徵的最優二值切分點(生成的同樣是二叉樹)。
6.3.1 基尼指數
設有K個分類,樣本屬於第k類的概率是:
- 概率分佈的基尼指數定義爲:
- 二分類問題,屬於1的概率是p,基尼指數爲:
- 集合問題,是集合D的第k類樣本子集,K是類的個數,基尼指數爲:。如果集合D被特徵A分割成兩部分和。在特徵A的條件下,D的基尼指數爲:
基尼指數和信息增益、信息增益比一樣,都近似代表分類誤差率。
6.3.2 CART分類樹生成
輸入:訓練數據集D
輸出:CART決策樹
從根結點開始,遞歸地對每個結點進行一下操作,構建二叉樹:
- 設結點的訓練數據集爲D,計算現有特徵A對D的基尼指數;
- 選擇基尼指數最小的特徵及其對應點,將數據集分成兩部分,分配到兩個子節點中。
- 對兩個子節點遞歸調用1和2,直到滿足停止條件(節點中樣本個數小於預定閾值或基尼指數小於預定閾值)。
- 生成CART決策樹
同樣以上一個案例爲例,如何使用CART算法生成決策樹
首先是挨個特徵計算,計算基尼指數。從第一輪結果中可知道的基尼指數最小(0.27),因此選擇“房子”作爲根結點,將數據劃分成兩部分。左邊是,由於中的數據全爲一類,因此爲一個葉結點。右邊是,對其內的特徵繼續計算新的基尼指數,即第二輪計算。
從結果中可以看到,的基尼指數爲0,確定“工作”爲新的節點。將數據分成兩部分:和。其中數據爲一類,所以是葉子結點。同理也是葉子結點。這就生成了一個歸回二叉決策樹。
6.3.3 CART剪枝
從生成的決策樹底部開始,剪去一些子樹,使決策樹變小,從而能夠對未知數據有更準確的預測。
剪枝的步驟就是先在已經生成決策樹底端不斷剪枝,直到的根結點,形成一個子樹序列;然後通過交叉驗證法在獨立的驗證數據集上對子樹序列進行預測,從中選擇最優子樹。
在剪枝的過程中計算子樹的損失函數:,其中是對訓練數據的預測誤差,是子樹的葉子結點個數,是參數爲時的子樹的整體損失。
時,任意內部結點t,以t爲單結點樹的損失函數是:
時,任意內部結點t,以t爲根結點的子樹損失函數是:
當或很小的時候,有:
當逐漸增大,在一個值的時候有:
所以,只要,和t就有相同的損失函數,t是單結點,是子樹,因此剪枝,保留t更好。將剪枝後得到,同時將設爲,那麼爲區間的最優子樹。如此一直剪下去,直到根結點。
剪枝得到子樹序列,利用獨立驗證的數據集測試子樹序列中各個子樹的平方誤差或者基尼指數。在子樹序列中,一個子樹對應一個,選擇損失最小的子樹作爲最終的剪枝結果,得到最優化決策樹。
6.3.4 CART剪枝流程
輸入:CART迴歸生成樹
輸出:最優決策樹
- 設
- 設
- 自下而上地對各個內部結點t計算,以及,。其中表示以t爲根結點的子樹,是對訓練數據的預測誤差,是的葉結點個數。
- 對的內部結點t進行剪枝,並對葉結點t以多數表決法(投票)決定其類,得到樹T。
- 設
- 如果不是由根結點以及兩個葉結點構成的數,則返回到步驟2;否則令。
- 採用交叉驗證法在子樹序列中選擇最優的子樹。
7.代碼實現
關於案例的ID3算法和C4.5算的代碼實現,見信息熵、信息增益、信息增益比原理。