決策樹,顧名思義,即以建樹的形式來做決策。
- 決策樹策略:自上向下,分而治之。
- 基本結構:根節點、父節點、子節點和葉子節點。子節點由父節點根據某一規則分裂而來,然后子節點作為新的父親節點繼續分裂,直至不能分裂為止。而根節點是沒有父節點的節點,即初始分裂節點,葉子節點是沒有子節點的節點。

- 樹的構建:
步驟1:將所有的數據看成是一個節點(根節點),進入步驟2;
步驟2:根據划分准則,從所有屬性中挑選一個對節點進行分割,進入步驟3;
步驟3:生成若干個子節點,對每一個子節點進行判斷,如果滿足停止分裂的條件,進入步驟4;否則,進入步驟2;
步驟4:設置該節點是葉子節點,其輸出的結果為該節點數量占比最大的類別。
注:在決策樹基本算法中,有三種情形會導致遞歸返回:
1) 當前結點包含的樣本全屬於同一類別,無需划分;
2) 當前屬性集為空,或是所有樣本在所有屬性上取值相同,無法划分;
3) 當前結點包含的樣本集合為空,不能划分。
- 表示屬性的方法
1)二元屬性:兩個輸出
2)標量屬性:具有多個屬性值,比如婚姻狀況={單身、已婚、離異},兩種划分方法:多路划分:(a);二元划分:(b);

3)有序屬性:同樣可以產生二元或多路划分,要求是不違背有序性。例如:

4)連續屬性:二元或區間形式輸出,例如:

- 划分准則:
一般而言,隨着划分過程不斷進行,我們希望決策樹的分支結點所包含的樣本盡可能屬於同一類別,即結點的"純度"越來越高。
1、信息增益
首先了解信息熵的概念
信息熵:假設樣本集合D中第k類樣本所占的比例為
,則D的信息熵定義為:
Ent(D)越小,則D的純度越高。
注:
1)約定p=0時,plog(p)=0;
2)當D只含一類時(純度最高),此時Ent(D)=0(最小值)
3)當D中所有類所占比例相同(純度最低),此時Ent(D)=
(最大值)
假設離散屬性a有V個不同的取值,若使用a來對樣本集D進行划分,則會產生V個分支節點,每個分支節點上的樣本在a上的取值都相同
記第v個分支節點上樣本為
,則可計算其相應的信息熵,再根據每個節點上的樣本占比給分支節點賦予權重
,可計算出以屬性a作為划分屬性所獲得的“信息增益”為:
![]()
注:
1)一般而言,信息增益越大,則意味着用屬性a來進行划分所獲得的"純度提升"越大,因此,我們可用信息增益來進行決策樹的划分屬性選擇。
2)著名的ID3 決策樹學習算就是以信息增益為准則來選擇划分屬性。
2、增益率
實際上,信息增益准則對可取值數目較多的屬性有所偏好,可以試想,選擇一個唯一對應一個樣本的屬性進行分類,每一類都是最純的,對應的信息增益也是最大的,然而這樣的划分無疑是不具備泛化能力的。
基於此,著名的C4.5決策樹算法不直接使用信息增益,而是使用“增益率”來選擇最優划分屬性:

其中,IV(a)稱為a的“固有值”,a的可能取值數目越多,IV(a)的值通常越大。
需注意的是,增益率准則對可取值數目較少的屬性有所偏好,因此, C4.5算法並不是直接選擇增益率最大的候選划分屬性,而是使用了一個啟發式:先從候選划分屬性中找出信息增益高於平均水平的屬性,再從中選擇增益率最高的。
3、基尼指數
CART決策樹使用“基尼指數”來選擇划分屬性:

顯然,Gini反映了從數據集D中隨機抽取兩個樣本,其類別標記不一樣的概率,因此,Gini越小,則D的純度越高。
屬性a的基尼指數定義為:
![]()
選擇使上式最小的屬性a作為划分屬性。
- 剪枝處理
剪枝是決策樹學習算法對付"過擬合"的主要手段。
過擬合原因:
1)噪聲導致的過擬合:擬合了被誤標記的樣例,導致誤分類。
2)缺乏代表性樣本導致的過擬合:缺乏代表性樣本的少量訓練集作出的決策會出現過擬合。
3)多重比較造成的過擬合:復雜模型。
基本策略有"預剪枝" 和"后剪枝";
預剪枝是指在決策樹生成過程中,對每個結點在划分前先進行估計,若當前結點的划分不能帶來決策樹泛化性能提升,則停止划分並將當前結點標記為葉結點;
后剪枝則是先從訓練集生成一棵完整的決策樹,然后自底向上地對非葉結點進行考察,若將該結點對應的子樹替換為葉結點能帶來決策樹泛化性能提升,則將該子樹替換為葉結點。
判斷決策樹泛化性能是否提升:留出法,即預留一部分數據用作"驗證集"以進行性能評估。
例如:在預剪枝中,對於每一個分裂節點,對比分裂前后決策樹在驗證集上的預測精度,從而決定是否分裂該節點。而在后剪枝中,考察非葉節點,對比剪枝前后決策樹在驗證集上的預測精度,從而決定是否對其剪枝。
兩種方法對比:
1)預剪枝使得決策樹的很多分支都沒有"展開”,不僅降低過擬合風險,而且顯著減少訓練/測試時間開銷;但,有些分支的當前划分雖不能提升泛化性能,但在其基礎上進行的后續划分卻有可能導致性能顯著提高,即預剪枝基於"貪心"本質禁止這些分支展開,給預剪枝決策樹帶來了欠擬含的風險。
2)后剪枝決策樹通常比預剪枝決策樹保留了更多的分支。一般情形下,后剪枝決策樹的欠擬合風險很小,泛化性能往往優於預剪枝決策樹,但后剪枝過程是在生成完全決策樹之后進行的,並且要自底向上地對樹中的所有非葉結點進行逐一考察,因此其訓練時間開銷比未剪枝決策樹和預剪枝決策樹都要大得多。
- 特殊值處理
1、連續值
以上都是基於離散屬性進行討論,而連續屬性的可取值數目不再有限, 因此,不能直接根據連續屬性的可取值來對結點進行划分。此時需要進行連續屬性離散化,最簡單的策略是采用二分法對連續屬性進行處理(C4 . 5)。
給定樣本集D和連續屬性a,假設a在D上出現了n個不同的取值,升序排列后記為:
,基於划分點t可將D分為D-(不大於t)和D+(大於t)兩個子集,而對於相鄰的屬性取值
,t在
之間取任何值對分類結果(D-和D+)都是一樣的,可直接取其中位點進行考慮。
故,對連續屬性a,可考察包含n-1個元素的候選划分點t集合:
![]()
於是,我們就可像離散屬性值一樣來考察這些划分點,選取最優的划分點進行樣本集合的划分,例如,使用信息增益:

即選擇使信息增益最大的划分點進行划分。
注:
1)可將划分點設為該屬性在訓練集中出現的不大於中位點的最大值,從而使得最終決策樹使用的划分點都在訓練集中出現過。
2)與離散屬性不同,若當前結點划分屬性為連續屬性,該屬性還可作為其后代結點的划分屬性。
2、缺失值
缺失問題:即樣本的某些屬性值缺失。
面臨問題:
1)如何在屬性值缺失的情況下進行划分屬性選擇?
2)給定划分屬性,若樣本在該屬性上的值缺失,如何對樣本進行划分?
解決方法:(C4.5)
給定訓練集D和屬性a,僅對D中在屬性a上沒有缺失值的樣本子集
來判斷屬性a的優劣。假定我們為每個樣本x賦予一個權重w(x)(初始化為1),定義:

由以上定義,將信息增益推廣為:

其中,
對於問題2),若樣本x在a上的取值缺失,則將x同時划入所有子節點,且樣本權值對應於屬性值
調整為
,即讓同一個樣本以不同概率划入不同的子節點中去。
以西瓜數據集為例:

以屬性“色澤”為例,根節點包含全部17個樣例,各樣本初始權重為1,該屬性上無缺失的樣例子集包含編號為{2 ,3 ,4, 6 , 7, 8, 9 , 10, 11 , 12 , 14, 15, 16, 17}的14個樣例,其信息熵為:

對應的屬性取值為“青綠”,“烏黑”,“淺白”的樣本子集的信息熵分別為:

因此,非缺失樣本子集的信息增益為:

從而,計算得所有樣本集的信息增益為:
![]()
類似地可計算出其他所有屬性在D上的信息增益:

選擇信息增益最大對應的屬性“紋理”進行划分,划分結果為:
“清晰”分支:編號為{1 ,2 ,3 ,4, 5 ,6 ,15}的樣本
“稍糊”分支:編號為{7 ,9, 13, 14, 17}的樣本
“模糊”分支:編號為{11 ,12, 16}的樣本
缺失樣本:{8},同時進入三個分支中,權重分別調整為7/15,5/15和3/15;編號{10}類似。
- 泛化誤差估計
1、再代入估計
再代入估計方法假設訓練數據集可以很好地代表整體數據,因此,可以使用訓練誤差(再代入誤差)提供對泛化誤差的樂觀估計。此情形下,決策樹算法將簡單地選擇產生最低訓練誤差的模型作為最終的模型,盡管,使用訓練誤差通常是泛化誤差的一種很差的估計。
2、結合模型復雜度
根據奧卡姆剃刀原則:“給定兩個具有相同泛化誤差的模型,較簡單的模型比較復雜的模型更可取”,復雜模型中的附加成分很大程度上是基於對偶然的擬合。
以下是把模型復雜度與模型評估結合在一起的方法:
悲觀誤差評估
使用訓練誤差與模型復雜度罰項的和來計算泛化誤差,如:
設n(t)是結點t分類的訓練記錄數,e(t)是被誤分類的記錄數,則決策樹T的悲觀誤差可表示為:

其中,k是決策樹的葉結點數,e(T)是決策樹的總訓練誤差,
是每個葉結點對應的罰項。
例:假設有如下決策樹,已知其誤分類率為6/24,每個結點的懲罰項設為0.5,則其悲觀誤差為:

注:關於懲罰項的理解:對於二叉樹來說,0.5的懲罰項意味着只要至少能夠改善一個訓練記錄的分類,結點就應該分裂,因為分裂一個結點等價於總誤差增加0.5,代價比犯一個訓練錯誤小。而如果令懲罰項為1,說明除非能減少一個以上訓練記錄的誤分類,否則結點不應當分裂。
3、使用驗證集
此方法中,不使用訓練集來估計泛化誤差,而是把原始數據集分為訓練集和驗證集,驗證集用於估計泛化誤差。通常是通過對算法進行調參,直到算法產生的模型在驗證集上達到最低的錯誤率。
