深入理解決策樹算法


引言

決策樹(Decision Tree)是機器學習中一種經典的分類與回歸算法。本文主要討論用於分類的決策樹。決策樹模型呈樹形結構,在分類問題中,決策樹模型可以認為是if-then規則的集合,也可以認為是定義在特征空間與類空間上的條件概率分布。其主要優點是模型具有可讀性,分類速度快。決策樹學習通常包括3個步驟:特征選擇決策樹的生成決策樹的剪枝

基本原理

模型結構

決策樹由結點(Node)和有向邊(Directed Edge)組成。結點有兩種類型:內部結點(Internal Node)和葉結點(Leaf Node)。內部結點表示特征或屬性,葉結點表示一個類別,有向邊代表了划分規則。

決策樹從根結點到子結點的的有向邊代表了一條路徑。決策樹的路徑是互斥並且是完備的。

用決策樹分類時,對樣本的某個特征進行測試,根據測試結果將樣本分配到樹的子結點上。此時每個子結點對應該特征的一個取值。遞歸地對樣本測試,直到該樣本被划分葉結點。最后將樣本分配為葉結點所屬的類。

條件概率分布

決策樹將特征空間划分為互不相交的單元,在每個單元定義一個類的概率分布,這就構成了一個條件概率分布。

Decision Tree

  • 決策樹的每一條路徑對應於划分中的一個基本單元。

  • 設某個單元\(\mathbb S\)內部有\(N_S\)個樣本點,則它定義了一個條件概率分布$p(y\mid \mathbf{\vec x}), \mathbf{\vec x} \in \mathbb S $。

  • 單元上的條件概率偏向哪個類,則該單元划歸到該類的概率較大。即單元的類別為:

\[\arg\max_y p(y \mid \mathbf{\vec x}), \mathbf{\vec x} \in \mathbb S \]

  • 決策樹所代表的條件概率分布由各個單元給定條件下類的條件概率分布組成。

通俗來講,在訓練過程中,我們學習構建的決策樹(規則)會將訓練樣本划分在不同的葉子節點中,每個葉子節點所代表的類別就是該葉子節點中數量最多的樣本類別,當然在某些場景下,我們會考慮訓練樣本的權重,來定義葉子節點代表的類別。

學習過程

決策樹學習本質上是從訓練數據集中歸納出一組分類規則。與訓練數據集不相矛盾的決策樹(即能對訓練數據進行正確分類的決策樹)可能有多個,也可能一個也沒有。我們需要的是一個與訓練數據矛盾較小的決策樹,同時具有很好的泛化能力。

決策樹學習的算法通常是一個遞歸地選擇最優特征,並根據該特征對訓練數據進行分割,使得對各個子數據集有一個最好的分類的過程。這一過程對應着對特征空間的划分,也對應着決策樹的構建。開始,構建根結點,將所有訓練數據都放在根結點。選擇一個最優特征,按照這一特征將訓練數據集分割成子集,使得各個子集有一個在當前條件下最好的分類。如果這些子集己經能夠被基本正確分類,那么構建葉結點,並將這些子集分到所對應的葉結點中去;如果還有子集不能被基本正確分類,那么就對這些子集選擇新的最優特征,繼續對其進行分割,構建相應的結點。如此遞歸地進行下去,直至所有訓練數據子集被基本正確分類,或者沒有合適的特征為止。最后每個子集都被分到葉結點上,即都有了明確的類。這就生成了一棵決策樹。

以上方法生成的決策樹可能對訓練數據有很好的分類能力,但對未知的測試數據卻未必有很好的分類能力,即可能發生過擬合現象。我們需要對已生成的樹自下而上進行剪枝,將樹變得更簡單,從而使它具有更好的泛化能力。具體地,就是去掉過於細分的葉結點,使其回退到父結點,甚至更髙的結點,然后將父結點或更高的結點改為新的葉結點。

如果特征數量很多,也可以在決策樹學習開始的時候,對特征進行選擇,只留下對訓練數據有足夠分類能力的特征。

可以看出,決策樹學習算法包含特征選擇決策樹的生成決策樹的剪枝過程。由於決策樹表示一個條件概率分布,所以深淺不同的決策樹對應着不同復雜度的概率模型。決策樹的生成對應於模型的局部選擇,決策樹的剪枝對應於模型的全局選擇。決策樹的生成只考慮局部最優,相對地,決策樹的剪枝則考慮全局最優。

決策樹學習常用的算法有ID3、C4.5與CART,下文結合這些算法分別敘述決策樹學習的特征選擇、決策樹的生成和剪枝過程。

特征選擇

特征選擇在於選取對訓練數據具有分類能力的特征。這樣可以提髙決策樹學習的效率。如果利用一個特征進行分類的結果與隨機分類的結果沒有很大差別,則稱這個特征是沒有分類能力的。經驗上扔掉這樣的特征對決策樹學習的精度影響不大。

通常特征選擇的准則是信息增益信息增益比

信息增益

為了便於說明,先給出熵與條件熵的定義。

在信息論與概率統計中,熵(Entropy)是表示隨機變量不確定性的度量。設X是一個取有限個值的離散隨機變量,其概率分布為:

\[P\left \{ X=x_{i} \right \}=p_{i},\;\;\;i=1,2\cdots ,n \]

則隨機變量X的熵定義為:

\[H(X) = - \sum_{i=1}^n p_{i} \log p_{i} \]

在上式中,若\(p_{i}=0\),則定義\(0\log0=0\)。通常,式中的對數以2為底或以自然對數e為底,對應熵的單位分別稱作比特(Bit)或納特(Nat)。由定義可知,熵只依賴於X的分布,而與X的取值無關,所以也可將X的熵記作\(H(p)\),即:

\[H(p) = - \sum_{i=1}^n p_{i} \log p_{i} \]

熵越大,隨機變量的不確定性就越大。從定義可驗證:

\[0 \leq H(p) \leq \log n \]

當隨機變量只取兩個值,例如1、0時,即X的分布為:

\[P(X=1)=p,\; \; \; P(X=0)=1-p,\; \; \; 0 \leq p \leq 1 \]

熵為:

\[H(p)=-p\log_{2}p-(1 - p)log_{2}(1-p) \]

\(p = 0\)\(p = 1\)\(H(p) = 0\),隨機變量完全沒有不確定性。當\(p=0.5\)時, \(H(p)=1\),熵取值最大,隨機變量不確定性最大。

二元信源熵函數

設有隨機變量(X, Y),其聯合概率分布為:

\[P(X = x_{i},Y = y_{j}) = p_{ij}\;,\; \; \;i = 1,2,\cdots,n;\;\;j= 1,2,\cdots,m \]

條件熵\(H(X\mid Y)\)表示在己知隨機變量X的條件下隨機變量Y的不確定性。隨機變量X給定的條件下隨機變量Y的條件熵(Conditional Entropy) \(H(X\mid Y)\),定義為X給定條件下Y的條件概率分布的熵對X的數學期望:

\[H(X\mid Y)=\sum_{i=1}^{n}p_{i}H(Y\mid X=X_{i}) \]

這里,\(p_{i}=P(X=x_{i})\;,\; \; \;i=1,2,\cdots,n\)

當熵和條件熵中的概率由數據估計(特別是極大似然估計)得到時,所對應的熵與條件熵分別稱為經驗熵(Empirical Entropy)和經驗條件熵(Empirical Conditional Entropy)。此時,如果有0概率,令\(0\log0 = 0\)

信息增益(Information Gain)表示得知特征X的信息而使得類Y的信息的不確定性減少的程度。

特征\(A\)對訓練數據集\(D\)的信息增益\(g(D,A)\),定義為集合\(D\)的經驗熵\(H(D)\)與特征\(A\)給定條件下\(D\)的經驗條件熵\(H(D\mid A)\)之差,即:

\[g(D,A)=H(D)-H(D\mid A) \]

—般地,熵\(H(Y)\)與條件熵之差\(H(Y\mid X)\)稱為互信息(Mutual Information)。決策樹學習中的信息增益等價於訓練數據集中類與特征的互信息。

決策樹學習應用信息增益准則選擇特征。給定訓練數據集\(D\)和特征\(A\),經驗熵\(H(D)\)表示對數據集\(D\)進行分類的不確定性。而經驗條件熵\(H(D\mid A)\)表示在特征\(A\)給定的條件下對數據集\(D\)進行分類的不確定性。那么它們的差,即信息增益, 就表示由於特征\(A\)而使得對數據集\(D\)的分類的不確定性減少的程度。顯然,對於數據集\(D\)而言,信息增益依賴於特征,不同的特征往往具有不同的信息增益,信息增益大的特征具有更強的分類能力。

根據信息增益准則的特征選擇方法是:對訓練數據集(或子集)\(D\),計算其每個特征的信息增益,並比較它們的大小,選擇信息增益最大的特征。

設訓練數據集為\(D\)\(\left | D \right |\)表示其樣本容量,即樣本個數。設有K個類\(C_{k}\)\(k=1,2,\cdots ,K\)\(\left | C_{k} \right |\)為屬於類\(C_{k}\)的樣本個數,\(\sum_{k=1}^{K}\left |C_{k} \right |=\left | D \right |\)。設特征\(A\)n個不同的取值\(\left \{ a_{1},a_{2},\cdots ,a_{n} \right \}\),根據特征\(A\)的取值將\(D\)分為n個子集\(D_{1},D_{2},\cdots ,D_{n}\)\(\left | D_{i} \right |\)\(D_{i}\)的樣本個數,\(\sum_{i=1}^{n}\left |D_{i} \right |=\left | D \right |\)。記子集\(D_{i}\)中屬於類\(C_{k}\)的樣本的集合為\(D_{ik}\),即\(D_{ik}=D_{i}\bigcap D_{k}\)\(\left | D_{ik} \right |\)\(D_{ik}\)的樣本個數。於是信息增益的算法如下:

信息增益的算法

​ 輸入:訓練數據集\(D\)和特征\(A\)

​ 輸出:特征\(A\)對訓練數據集\(D\)的信息增益\(g(D,A)\)

​ (1) 計算數據集\(D\)的經驗熵\(H(D)\)

\[H(D)=-\sum_{k=1}^{K}\frac{\left | C_{k} \right |}{\left | D \right |}\log_{2}{\frac{\left | C_{k} \right |}{\left | D \right |}} \]

​ (2) 計算特征\(A\)對數據集\(D\)的經驗條件熵\(H(D\mid A)\)

\[H(D\mid A)=\sum_{i=1}^{n}\frac{\left | D_{i} \right |}{\left | D \right |}H(D_{i})=-\sum_{i=1}^{n}\frac{\left | D_{i} \right |}{\left | D \right |}\sum_{k=1}^{K}\frac{\left | D_{ik} \right |}{\left | D_{i} \right |}\log_{2}{\frac{\left | D_{ik} \right |}{\left | D_{i} \right |}} \]

​ (3) 計算信息增益:

\[g(D,A)=H(D)-H(D\mid A) \]

信息增益比

信息增益值的大小是相對於訓練數據集而言的,並沒有絕對意義。在分類問題困難時,也就是說在訓練數據集的經驗熵大的時候,信息增益值會偏大。反之,信息增益值會偏小。使用信息增益比(Information Gain Ratio)可以對這一問題進行校正。這是特征選擇的另一准則。

特征\(A\)對訓練數據集\(D\)的信息增益比\(g_{R}(D,A)\)定義為其信息增益\(g(D,A)\)與訓練數據集\(D\)的經驗上\(H(D)\)之比:

\[g_{R}(D,A)=\frac{g(D,A)}{H(D)} \]

生成算法

ID3算法

ID3算法的核心是在決策樹各個結點上應用信息增益准則選擇特征,遞歸地構建決策樹。具體方法是:從根結點(Root Node)開始,對結點計算所有可能的特征的信息增益,選擇信息增益最大的特征作為結點的特征,由該特征的不同取值建立子結點;再對子結點遞歸地調用以上方法,構建決策樹;直到所有特征的信息增益均很小或沒有特征可以選擇為止。最后得到一個決策樹。ID3相當於用極大似然法進行概率模型的選擇。具體算法過程如下:

ID3的生成算法

​ 輸入:訓練數據集\(D\),特征集\(A\),閾值$\varepsilon $;

​ 輸出:決策樹\(T\)

​ (1) 若\(D\)中所有實例屬於同一類\(C_{k}\),則\(T\)為單結點樹,並將類作為該結點的類標記,返回\(T\)

​ (2) 若$A= \varnothing \(,則\)T\(為單結點樹,並將\)D\(中實例數最大的類\)C_{k}\(作為該結點的類標記,返回\)T$;

​ (3) 否則,計算\(A\)中各特征對\(D\)的信息增益,選擇信息增益最大的特征\(A_{g}\)

​ (4) 如果\(A_{g}\)的信息增益小於閾值$\varepsilon \(,則置\)T\(為單結點樹,並將\)D\(中實例數最大的類作為該結點的類標記,返回\)T$;

​ (5) 否則,對\(A_{g}\)的每一可能值\(a_{i}\),依\(A_{g}=a_{i}\)\(D\)分割為若干非空子集\(D_{i}\),將 \(D_{i}\)中實例數最大的類作為標記,構建子結點,由結點及其子結點構成樹\(T\),返回\(T\)

​ (6) 對第i個子結點,以\(D_{i}\)為訓練集,以為\(A-\left \{ A_{g} \right \}\)特征集,遞歸地調用步(1)〜步(5),得到子樹\(T_{i}\),返回\(T_{i}\)

ID3算法只有樹的生成,所以該算法生成的樹容易產生過擬合。

C4.5算法

C4.5算法與ID3算法相似,C4.5算法對ID3算法進行了改進。C4.5在生成的過程中,用信息增益比來選擇特征。

C4.5的生成算法

​ 輸入:訓練數據集\(D\),特征集\(A\),閾值$\varepsilon $;

​ 輸出:決策樹\(T\)

​ (1) 若\(D\)中所有實例屬於同一類\(C_{k}\),則\(T\)為單結點樹,並將類作為該結點的類標記,返回\(T\)

​ (2) 若$A= \varnothing \(,則\)T\(為單結點樹,並將\)D\(中實例數最大的類\)C_{k}\(作為該結點的類標記,返回\)T$;

​ (3) 否則,計算\(A\)中各特征對\(D\)的信息增益比,選擇信息增益比最大的特征\(A_{g}\)

​ (4) 如果\(A_{g}\)的信息增益比小於閾值$\varepsilon \(,則置\)T\(為單結點樹,並將\)D\(中實例數最大的類作為該結點的類標記,返回\)T$;

​ (5) 否則,對\(A_{g}\)的每一可能值\(a_{i}\),依\(A_{g}=a_{i}\)\(D\)分割為若干非空子集\(D_{i}\),將 \(D_{i}\)中實例數最大的類作為標記,構建子結點,由結點及其子結點構成樹\(T\),返回\(T\)

​ (6) 對第i個子結點,以\(D_{i}\)為訓練集,以為\(A-\left \{ A_{g} \right \}\)特征集,遞歸地調用步(1)〜步(5),得到子樹\(T_{i}\),返回\(T_{i}\)

剪枝算法

決策樹生成算法遞歸地產生決策樹,直到不能繼續下去為止。這樣產生的樹往往對訓練數據的分類很准確,但對未知的測試數據的分類卻沒有那么准確,即出現過擬合現象。過擬合的原因在於學習時過多地考慮如何提高對訓練數據的正確分類,從而構建出過於復雜的決策樹。解決這個問題的辦法是考慮決策樹的復雜度,對已生成的決策樹進行簡化。

在決策樹學習中將已生成的樹進行簡化的過程稱為剪枝(Pruning)。具體地,剪枝從已生成的樹上裁掉一些子樹或葉結點,並將其根結點或父結點作為新的葉結點,從而簡化分類樹模型。

決策樹的剪枝往往通過極小化決策樹整體的損失函數(Loss Function)或代價函數(Cost Function)來實現。設樹\(T\)的葉結點個數為\(\left | T \right |\)t是樹\(T\)的葉結點,該葉結點有\(N_{t}\)個樣本點,其中k類的樣本點有\(N_{tk}\)個,\(k=1,2,\cdots ,K\)\(H_{t}(T)\)為葉結t點上的經驗熵,\(a\geq 0\)為參數,則決策樹學習的損失函數可以定義為:

\[C_{a}(T)=\sum_{t=1}^{\left | T \right |}N_{t}H_{t}(T)+a\left | T \right | \]

其中經驗熵為:

\[H_{t}(T)=-\sum_{k}\frac{N_{tk}}{N_{t}}\log \frac{N_{tk}}{N_{t}} \]

在損失函數中,記:

\[C(T)=\sum_{t=1}^{\left | T \right |}N_{t}H_{t}(T)=-\sum_{t=1}^{\left | T \right |}\sum_{k=1}^{K}N_{tk}\log \frac{N_{tk}}{N_{t}} \]

這時有:

\[C_{a}(T)=C(T)+a|T| \]

上式中,\(C(T)\)表示模型對訓練數據的預測誤差,即模型與訓練數據的擬合程度,\(|T|\)表示模型復雜度,也稱正則項,參數\(a>0\)控制兩者之間的影響。較大的\(a\)促使選擇較簡單的模型(樹),較小的\(a\)促使選擇較復雜的模型(樹)。\(a = 0\)意味着只考慮模型與訓練數據的擬合程度,不考慮模型的復雜度。

剪枝,就是當\(a\)確定時,選擇損失函數最小的模型,即損失函數最小的子樹。當\(a\)值確定時,子樹越大,往往與訓練數據的擬合越好,但是模型的復雜度就越髙;相反,子樹越小,模型的復雜度就越低,但是往往與訓練數據的擬合不好。損失函數正好表示了對兩者的平衡.

可以看出,決策樹生成只考慮了通過提高信息增益(或信息增益比)對訓練數據進行更好的擬合。而決策樹剪枝通過優化損失函數還考慮了減小模型復雜度。決策樹生成學習局部的模型,而決策樹剪枝學習整體的模型。

決策樹剪枝過程

樹的剪枝算法

​ 輸入:生成算法產生的整個樹\(T\),參數\(a\)

​ 輸出:修剪后的子樹\(T\)

​ (1) 計算每個結點的經驗熵;

​ (2) 遞歸地從樹的葉結點向上回縮。設一組葉結點回縮到其父結點之前與之后的整體樹分別為\(T_{B}\)\(T_{A}\),其對應的損失函數值分別是\(C_{a}(T_{B})\)\(C_{a}(T_{A})\),如果\(C_{a}(T_{A}) \leqslant C_{a}(T_{B})\),則進行剪枝,即將父結點變為新的葉結點。

​ (3) 返回(2),直至不能繼續為止,得到損失函數最小的子樹\(T_{a}\)

CART 樹

分類與回歸樹(Classification And Regression Tree, CART)模型由Breiman等人在1984年提出,是應用廣泛的決策樹學習方法。CART同樣由特征選擇、樹的生成及剪枝組成,既可以用於分類也可以用於回歸。以下將用於分類與回歸的樹統稱為決策樹。

CART是在給定輸入隨機變量X條件下輸出隨機變量Y的條件概率分布的學習方法。CART假設決策樹是二叉樹,內部結點特征的取值為“是”和“否”,左分支是取值為“是”的分支,右分支是取值為“否”的分支。這樣的決策樹等價於遞歸地二分每個特征,將輸入空間即特征空間划分為有限個單元,並在這些單元上確定預測的概率分布,也就是在輸入給定的條件下輸出的條件概率分布。

CART算法由以下兩步組成:

​ (1) 決策樹生成:基於訓練數據集生成決策樹,生成的決策樹要盡量大;

​ (2) 決策樹剪枝:用驗證數據集對己生成的樹進行剪枝並選擇最優子樹,這時用損失函數最小作為剪枝的標准。

CART 生成

決策樹的生成就是遞歸地構建二叉決策樹的過程。對回歸樹用平方誤差最小化准則,對分類樹用基尼指數(Gini Index)最小化准則,進行特征選擇,生成二叉樹。

  1. 回歸樹的生成

假設XY分別為輸入和輸出變量,並且Y是連續變量,給定訓練數據集

\[D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),\cdots ,(x_{N},y_{N}) \right \} \]

一個回歸樹對應着輸入空間(即特征空間)的一個划分以及在划分的單元上的輸出值。假設已將輸入空間划分為M個單元,\(R_{1},R_{2},\cdots ,R_{M}\),並且在每個單元\(R_{m}\)上有一個固定的輸出值\(c_{m}\),於是回歸樹模型可表示為:

\[f(x)=\sum_{m=1}^{M}c_{m}I(x\in R_{m}) \]

當輸入空間的划分確定時,可以用平方誤差\(\sum_{x_{i}\in R_{m}}(y_{i}-f(x_{i}))^2\)來表示回歸樹對於訓練數據的預測誤差,用平方誤差最小的准求解每個單元上的最優輸出值。易知,單元\(R_{m}\)上的\(c_{m}\)的最優值\(\hat{c}_{m}\)\(R_{m}\)的所有輸入實例\(x_{i}\)對應的輸出\(y_{i}\)的均值,即:

\[\hat{c}_{m}=avg(y_{i}\mid x_{i}\in R_{m}) \]

采用啟發式的方法對輸入空間進行划分,選擇第j個變量\(x^{(j)}\)和它取的值s,作為切分變量(Splitting Variable)和切分點(Splitting Point), 並定義兩個區域:

\[R_{1}(j,s)=\left \{ x\mid x^{(j)}\leq s \right \}\;\;和\;\;R_{2}(j,s)=\left \{ x\mid x^{(j)}> s \right \} \]

然后尋找最優切分變量j和最優切分點s,具體地,求解

\[\underset{j,s}{min}\left [ \underset{c_{1}}{min}\sum_{x_{i}\in R_{1}(j,s)}(y_{i}-c_{1})^{2} + \underset{c_{2}}{min}\sum_{x_{i}\in R_{2}(j,s)}(y_{i}-c_{2})^{2} \right ] \]

對固定輸入變量j可以找到最優切分點s

\[\hat{c}_{1}=avg(yi\mid x_{i}\in R_{1}(j,s))\;\;和\;\;\hat{c}_{2}=avg(yi\mid x_{i}\in R_{2}(j,s)) \]

遍歷所有輸入變量,找到最優的切分變量j,構成一個對\((j,s)\)。依此將輸入空間划分為兩個區域。接着,對每個區域重復上述划分過程,直到滿足停止條件為止。這樣就生成一棵回歸樹。這樣的回歸樹通常稱為最小二乘回歸樹(Least Squares Regression Tree)。

  1. 分類樹的生成

分類樹用基尼指數選擇最優特征,同時決定該特征的最有二值分割點。

在分類問題中,假設有K個類,樣本點屬於第k類的概率為\(p_{k}\),則概率分布的基尼指數定義為:

\[Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})=1-\sum_{k=1}^{K}p_{k}^{2} \]

對於二分類問題,若樣本點屬於第一個類的概率是p,則概率分部的基尼指數為:

\[Gini(p)=2p(1-p) \]

對於給定的樣本集合\(D\),其基尼指數為:

\[Gini(p)=1-\sum_{k=1}^{K}\left ( \frac{|C_{k}|}{|D|} \right )^2 \]

這里,\(C_{k}\)\(D\)中屬於第k類的樣本子集,K是類的個數。

如果樣本集合\(D\)根據特征\(A\)是否取某一可能值\(a\)被分割成\(D_{1}\)\(D_{2}\)兩部分,即:

\[D_{1}=\left \{ (x,y)\in D \mid A(x)=a \right \},\;\;D_{2}=D-D_{1} \]

則在特征\(A\)的條件下,集合\(D\)的基尼指數定義為:

\[Gini(D,A)=\frac{|D_{1}|}{|D|}Gini(D_{1})+\frac{|D_{2}|}{|D|}Gini(D_{2}) \]

基尼指數\(Gini(D)\)表示集合\(D\)的不確定性,基尼指數\(Gini(D,A)\)表示經\(A *=* a\)分割后集合\(D\)的不確定性。基尼指數值越大,樣本集合的不確定性也就越大,這一點與熵相似。

CART生成算法

​ 輸入:訓練數據集\(D\),停止計算的條件;

​ 輸出:CART決策樹。

​ 根據訓練數據集,從根結點開始,遞歸地對每個結點進行以下操作,構建二叉決策樹:

​ (1) 設結點的訓練數據集為\(D\),計算現有特征對該數據集的基尼指數。此時,對每一個特征對其可能取的每個值\(a\),根據樣本點對\(A=a\)的測試為“是”或 “否”將\(D\)分割成\(D_{1}\)\(D_{2}\)兩部分,計算\(A=a\)時的基尼指數。

​ (2) 在所有可能的特征\(A\)以及它們所有可能的切分點\(a\)中,選擇基尼指數最小的特征及其對應的切分點作為最優特征與最優切分點。依據最優特征與最優切分點,從現結點生成兩個子結點,將訓練數據集依特征分配到兩個子結點中去。

​ (3) 對兩個子結點遞歸地調用上述操作,直至滿足停止條件為止。

​ (4) 生成CART決策樹。

算法停止計算的條件是結點中的樣本個數小於預定閾值,或樣本集的基尼指數小於預定閾值(樣本基本屬於同一類),或者沒有更多特征。

CART 剪枝

CART剪枝算法從“完全生長”的決策樹的底端剪去一些子樹,使決策樹變小(模型變簡單),從而能夠對未知數據有更准確的預測,提高模型泛化能力。CART剪枝算法由兩步組成:首先從生成算法產生的決策樹\(T_{0}\)底端開始不斷剪枝,直到\(T_{0}\)的根結點,形成一個子樹序列\(\left \{ T_{0},T_{1}, \cdots ,T_{n} \right \}\);然后通過交叉驗證法在獨立的驗證數據集上對子樹序列進行測試,從中選擇最優子樹。

在剪枝過程中,計算子樹的損失函數:

\[C_{a}(T)=C(T)+a|T| \]

其中,\(T\)為任意子樹,\(C(T)\)為對訓練數據的預測誤差(如基尼指數),\(|T|\)為子樹的葉結點個數,\(a\)為參數,\(C_{a}(T)\)為參數是\(a\)時的子樹\(T\)的整體損失。參數\(a\)權衡訓練數據的擬合程度與模型的復雜度。

對固定的\(a\),—定存在使損失函數最\(C_{a}(T)\)小的子樹,將其表示為\(T_{a}\);在損失函數\(C_{a}(T)\)最小的意義下是最優的。容易驗證這樣的最優子樹是唯一的。當\(a\)大的時候,最優子樹\(T_{a}\)偏小;當\(a\)小的時候,最優子樹\(T_{a}\)偏大。極端情況,當\(a=0\)時,整體樹是最優的。當$a\rightarrow \infty $時,根結點組成的單結點樹是最優的。

可以用遞歸的方法對樹進行剪枝。將\(a\)從小增大,$0=a_{0}<a_{1}<\cdots <a_{n}<+\infty \(,產生一系列的區間味\)[a_{i},a_{i+1}),;;i=0,1,\cdots ,n\(;剪枝得到的子樹序列對應着區間\)a\in [a_{i},a_{i+1}),;;i=0,1,\cdots ,n\(的最優子樹序列\)\left { T_{0},T_{1}, \cdots ,T_{n} \right }$,序列中的子樹是嵌套的。

具體地,從整體樹\(T_{0}\)開始剪枝,對\(T_{0}\)的任意內部結點t,以t為單結點樹的損失函數是:

\[C_{a}(T)=C(T)+a \]

t為根結點的子樹\(T_{t}\)的損失函數是:

\[C_{a}(T)=C(T)+a|T_{t}| \]

\(a = 0\)\(a\)充分小時,有不等式:

\[C_{a}(T_{t})<C_{a}(t) \]

當增大時,在某一\(a\)有:

\[C_{a}(T_{t})=C_{a}(t) \]

\(a\)再增大時,\(C_{a}(T_{t})>C_{a}(t)\),只要\(a=\frac{C(t)-C(T_{t})}{|T_{t}|-1}\)\(T_{t}\)t有相同的損失函數值,而t的結點少,因此t\(T_{t}\)更可取,對\(T_{t}\)進行剪枝。

為此,對\(T_{0}\)中每一內部節點t,計算:

\[g(t)=\frac{C(t)-C(T_{t})}{|T_{t}|-1} \]

它表示剪枝后整體損失函數減少的程度。在\(T_{0}\)中減去\(g(t)\)最小的\(T_{t}\),將得到的子樹作為\(T_{1}\),同時將減小的\(g(t)\)設置為\(a_{1}\)\(T_{1}\)為區間\([a_{1},a_{2})\)的最優子樹。

如此剪枝下去,直到得到根節點。在這一過程中,不斷地增加\(a\)的值,產生新的區間。

在剪枝得到的子樹序列\(\left \{ T_{0},T_{1}, \cdots ,T_{n} \right \}\)中果果交叉驗證選取最優子樹\(T_{a}\)

具體地,利用獨立的驗證數據集,測試子樹序列\(\left \{ T_{0},T_{1}, \cdots ,T_{n} \right \}\)中各棵子樹的平方誤差或基尼指數。平方誤差或基尼指數最小的決策樹被認為是最優的決策樹。在子樹序列中,每棵子樹\(\left \{ T_{0},T_{1}, \cdots ,T_{n} \right \}\)都對應一個參數\(\left \{ a_{0},a_{1}, \cdots ,a_{n} \right \}\)。所以,當最優子樹\(T_{k}\)選定時,對應的\(a_{k}\)也就確定了,即得到了最優決策樹\(T_{a}\)

參考文獻

  1. 《統計學習方法 第一版》 P55~P74
  2. 決策樹
  3. DECISION TREES TUTORIAL


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM