李航-統計學習方法-筆記-5:決策樹


基本模型

簡介:決策樹可以認為是if-then規則的集合,也可以認為是定義在特征空間與類空間上的條件概率分布。其主要優點是模型具有可讀性,分類速度快。

決策樹學習通常包括3個步驟:特征選擇,決策樹生成,剪枝。

決策樹的內部結點表示一個特征或屬性,葉結點表示一個類。

If-then:決策樹路徑或其對應的if-then規則集合具有一個重要的性質,互斥並且完備,也就是說,每一個實例都被一條路徑或一條規則所覆蓋,而且只被一條路徑或者一條規則覆蓋。

概率分布:決策樹將特征空間划分為互不相交的單元,並在每個單元定義一個類的概率分布。決策樹的一條路徑對應於划分中的一個單元,決策樹所表示的條件概率分布由各個單元給定條件下類的條件概率分布組成,即\(P(Y | X)\),葉結點(單元)上的條件概率往往偏向某一類。

決策樹的學習:決策樹學習本質上是從訓練數據集中歸納出一組分類規則,找到一棵“與訓練數據矛盾較小,同時具有很好的泛化能力”的樹。

另一個角度看,決策樹學習是“由訓練集估計的條件概率模型”,基於特征空間划分的類的條件概率模型有多個。我們選擇的條件概率模型應該不僅對訓練數據有很好的擬合,而且對未知數據有很好的預測。

啟發式方法:從所有可能的決策樹中選取最優決策樹是NP完全問題,所以現實中通常采用啟發式方法,近似求解這一最優化問題。這樣得到的決策樹是次優的(sub-optimal)。

通常的做法是遞歸地選擇最優特征,並根據該特征對訓練數據進行分割,使得對各個子數據集有一個最好的分類的過程。

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

特征選擇

特征選擇:特征選擇在於選取對訓練數據具有分類能力的特征。

如果利用一個特征進行分類的結果與隨機分類的結果沒有很大區別,則稱這個特征是沒有分類能力的。經驗上扔掉這樣的特征對決策樹學習的影響不大。

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

熵(entropy):熵度量的是隨機變量的不確定性。熵越大,不確定性越大。

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

\(p_i=0\)時,\(0 \log0 = 0\)

通常對數以2或e為底,則熵的單位為比特(bit)或納特(nat)。
熵只依賴於\(X\)的分布,而與\(X\)的取值無關,所以\(H(x)\)也記作\(H(p)\)

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

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

條件熵:條件熵\(H(Y|X)\)表示在已知隨機變量\(X\)的條件下隨機變量\(Y\)的不確定性。

\[H(Y | X) = \sum_{i=1}^{n} p_i H(Y | X = x_i) \]

當概率由數據估計(特別是極大似然估計)時,所對應的熵與條件熵分別稱為經驗熵與經驗條件熵。

信息增益:信息增益表示得知特征\(X\)的信息而使類\(Y\)的信息的不確定性減少的程度。信息增益大的特征分類能力強。

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

\[H(D) = - \sum_{k=1}^{K} \frac{|C_k|}{|D|} \log_2 {\frac{|C_k|}{|D|}} \]

\[H(D \ | \ A) = \sum_{i=1}^{n} \frac{|D_i|}{|D|} H(D_i) = - \sum_{i=1}^{n} \frac{|D_i|}{|D|} \sum_{k=1}^{K} \frac{|D_{ik}|}{|D_i|} \log_2 {\frac{|D_{ik}|}{|D_i|}} \]

其中,\(|C_k|\)為類\(C_k\)的樣本個數,\(|D|\)表示樣本容量。

特征\(A\)\(n\)個不同的取值\(\{a_1, a_2, ..., a_n\}\),根據取值將\(D\)划分為\(n\)個子集\(D_1, D_2, ..., D_n\)\(|D_i|\)\(D_i\)的樣本個數。\(D_{ik} = D_i \cap C_k\)

信息增益比:以信息增益划分,存在“偏向於選擇取值較多的特征”的問題,用信息增益比可以校正這一問題。

\[g_R(D, A) = \frac{g(D, A)}{H_A(D)} \]

\[H_A(D) = - \sum_{i=1}^{n} \frac{|D_i|}{|D|} \log_2 \frac{|D_i|}{|D|} \]

\(H_A(D)\)為訓練集D關於特征A的值的熵,\(n\)是特征\(A\)的取值個數。

ID3和C4.5

決策樹生成的經典算法有ID3和C4.5。

ID3:ID3的核心是在各個結點上應用“信息增益”准則選擇特征。

從根結點出發,選擇信息增益最大的特征作為結點特征,由該特征的不同取值建立子結點,對子結點遞歸調用以上方法。直到所有特征的信息增益均很小(設一個閾值\(\varepsilon\))或沒有特征可選為止。

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

決策樹的剪枝

剪枝:學習時過多地考慮如何提高對訓練數據的正確分類,從而構建出過於復雜的決策樹(過擬合)。解決辦法是考慮決策樹的復雜度,對已生成的樹進行簡化,這一過程稱為剪枝(pruning)。

具體地,從樹上裁掉一些子樹或葉結點,並將其根結點或父結點作為新的葉結點,從而簡化分類樹模型。

決策樹的剪枝往往通過極小化決策樹整體的損失函數來實現。

決策樹的損失函數:設樹\(T\)的葉結點個數為\(|T|\)\(t\)是樹\(T\)的葉結點,該葉結點有\(N_t\)個樣本點,其中\(k\)類的樣本點有\(N_{tk}\)個,\(H_t(T)\)為葉結點上的經驗熵,則損失函數為:

\[C_\alpha(T) = C(T) + \alpha|T| \]

\[\begin{split}C(T) = \sum_{t=1}^{|T|} N_t H_t(T) &= \sum_{t=1}^{|T|} N_t [- \sum_{k=1}^{K} \frac{N_{tk}}{N_t} \log \frac{N_{tk}}{N_t}] \\ &= - \sum_{t=1}^{|T|} \sum_{k=1}^{K} N_{tk} \log \frac{N_{tk}}{N_t}\end{split} \]

其中\(C(T)\)表示模型對訓練數據的訓練誤差。\(|T|\)表示模型復雜度,參數$\alpha \geqslant 0 $ 控制兩者之間的影響。較大的\(\alpha\)促使選擇較簡單的模型,較小的\(\alpha\)促使選擇復雜的模型。

剪枝,就是當\(\alpha\)確定時,選擇損失函數最小的模型。

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

具體做法
(1)計算每個結點的經驗熵。
(2)遞歸地從樹的葉結點向上回縮,設一組葉結點回縮到其父結點之前與之后的整體樹為\(T_B\)\(T_A\),如果

\[C_\alpha(T_A) \leqslant C_\alpha(T_B) \tag{5.15} \]

則剪枝,將父結點變成新的葉結點。
(3)返回(2),直至不能繼續,得到損失函數最小的子樹\(T_\alpha\)

\((5.15)\)只考慮兩個樹的損失函數的差,其計算可以在局部進行,所以剪枝算法可由一種動態規划算法實現。

CART算法

CART:cart(classification and regression tree),分類與回歸樹,是應用廣泛的決策樹學習方法,既可用於分類,也可用於回歸。

CART假設決策樹是二叉樹,內部結點特征的取值為“是”和“否”,左分支是取值為“是”的分支,右分支是取值為“否”的分支。這樣的決策樹等價於遞歸地二分每個特征,將輸入空間即特征空間划分為有限個單元,並在這些單元上確定預測的概率分布。CART算法分為兩步:

(1)決策樹生成:基於訓練數據集生成決策樹,生成的決策樹要盡量大。
(2)決策樹剪枝:用驗證數據集對已生成的樹進行剪枝並選擇最優子樹,這時用損失函數最小作為剪枝的標准。

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

回歸樹的生成:假設已將輸入空間划分為\(M\)個單元\(R_1, R_2, ..., 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 = ave(y_i \ | \ x_i \in R_m) \]

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

\[R_1(j, s) = \{x \ | \ x^{(j)} \leqslant s\}, \ R_2(j, s) = \{x \ | \ x^{(j)} > s\} \]

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

\[\min_{j, s} \ [ \min_{c_1} \sum_{x_i \in R_1(j,s)} (y_i - c_1)^2 + \min_{c_2} \sum_{x_i \in R_2(j,s)} (y_i - c_2)^2] \]

\[\hat{c}_1 = ave( y_i \ | \ x_i \in R_1(j, s)), \ \hat{c}_2 = ave( y_i \ | \ x_i \in R_2(j, s)) \]

對固定輸入變量\(j\)可以找到最優切分點\(s\),遍歷所有輸入變量,找到最優的切分變量\(j\),構成一個對\((j, s)\)。依次將輸入空間划分為兩個區域。

對每個區域重復上述划分過程,直到滿足停止條件位置,這樣的回歸樹通常稱為最小二乘回歸樹。

分類樹的生成:分類問題中,假設有\(K\)個類,樣本點屬於\(k\)類的概率為\(p_k\),則概率分布的基尼指數定義為:

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

對於二分類:

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

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

\[Gini(D) = 1 - \sum_{k=1}^{K} (\frac{|C_k|}{|D|})^2 \]

如果樣本集合\(D\)根據特征\(A\)是否取某一可能值\(a\)被分割成\(D_1\)\(D_2\)兩部分,即\(D_1 = \{(x, y) \in D \ | \ A(x) = a\}, 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值越大,樣本集合的不確定性也越大(與熵類似),因此每次選擇Gini小的特征來划分。

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

上圖顯示了二分類問題中,Gini,半熵和分類誤差率的關系,可以看到Gini和半熵很接近,都可近似表示分類誤差率。

CART剪枝

簡述
(1)首先從生成算法產生的決策樹\(T_0\)底端開始不斷剪枝,直到\(T_0\)的根結點,形成一個子樹序列\(\{T_0, T_1, ..., T_n\}\)
(2)通過交叉驗證法在獨立的驗證數據集上對子樹序列進行測試,從中選擇最優子樹。

損失函數
剪枝過程中,計算子樹的損失函數:\(C_\alpha(T) = C(T) + \alpha|T|\)
其中,\(T\)為任意子樹,\(C(T)\)為訓練數據的預測誤差(如基尼指數)。
\(|T|\)為子樹的葉結點個數,$\alpha \geqslant 0 $為參數,權衡訓練數據的擬合程度與模型的復雜程度。

具體做法
(1)對固定的\(\alpha\),一定存在使損失函數\(C_\alpha(T)\)最小的子樹,將其表示為\(T_\alpha\)

\(\alpha\)大時,最優子樹\(T_\alpha\)偏小;\(\alpha\)小時,最優子樹\(T_\alpha\)偏大。

\(\alpha = 0\)時,整體樹是最優的,\(\alpha \to \infty\)時,根結點組成的單結點是最優的。

Breiman等人證明:可以用遞歸的方法對樹進行剪枝。將\(\alpha\)從小增大,\(0 = \alpha_0 < \alpha_1 < ... < \alpha_n < + \infty\),產生一系列的區間\([\alpha_i, \alpha_{i+1}), i = 0, 1, ..., n\);剪枝得到的子樹序列對應着區間\(\alpha \in [\alpha_i, \alpha_{i+1})\)的最優子樹序列\(\{T_0, T_1, ..., T_n\}\)

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

\[C_\alpha(t) = C(t) + \alpha \]

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

\[C_\alpha(T_t) = C(T_t) + \alpha | T_t | \]

\(\alpha = 0\)及充分小時(\(\alpha < \frac{C(t) - C(T_t)}{|T_t| - 1}\)):

\[C_\alpha(T_t) < C_\alpha(t) \tag{5.29} \]

\(\alpha\)增大,\(\alpha = \frac{C(t) - C(T_t)}{|T_t| - 1}\)時有:

\[C_\alpha(T_t) = C_\alpha(t) \]

此時,\(T_t\)\(t\)有相同的損失函數值,而\(t\)的結點少,因此\(t\)\(T_t\)更可取,對\(T_t\)進行剪枝。

\(\alpha\)再增大時(\(\alpha > \frac{C(t) - C(T_t)}{|T_t| - 1}\)),不等式(5.29)反向。

為此,對\(T_0\)中每一內部結點\(t\),計算

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

它表示剪枝后整體損失函數減少的程度。在\(T_0\)中剪去\(g(t)\)最小的\(T_t\),將得到的子樹作為\(T_1\),同時將最小的\(g(t)\)設為\(\alpha_1\)\(T_1\)為區間\([\alpha_1, \alpha_2)\)的最優子樹。

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

(2)利用獨立的驗證數據集,測試子樹序列\(T_0, T_1, ..., T_n\)中各棵子樹的平方誤差或基尼指數。平方誤差或基尼指數最小的決策樹被認為是最優的決策樹。子樹序列\(T_1, T_2, ..., T_n\)都對應於一個參數\(\alpha_1, \alpha_2, ..., \alpha_n\)。所以,當最優子樹\(T_k\)確定時,對應的\(\alpha_k\)也確定了,即得到最優決策樹\(T_\alpha\)


免責聲明!

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



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