1. 程式人生 > >統計學習方法 學習筆記(十):決策樹

統計學習方法 學習筆記(十):決策樹

人生 最優決策 如何解決 極大似然函數 速度 結點 then 計算 結果

這一個學習筆記將要了解決策樹,在研一上機器學習這門課的時候,老師在講到這一節的時候,舉了一個例子我現在還能記得:你們坐在這裏上課,就像這個決策樹一樣,在你人生中的每一個重要結點,你都做出了選擇,經過多次的選擇,走到現在這個時候(坐在這裏聽課),人生就像一個決策樹,對於決策樹而言有多個葉子結點,也就像人生有多條路,前面的眾多選擇決定了自己的路。加油吧!在每一個結點上,請認真地做好每一個選擇。

決策樹模型呈樹形結構,在分類問題中,表示基於特征對實例進行分類的過程。它可以認為是if-then規則的集合,也可以認為是定義在特征空間與類空間上的條件概率分布。其主要優點是模型具有可讀性,分類速度快。學習時,利用訓練數據,根據損失函數最小化的原則建立決策樹模型。預測時,對新的數據,利用決策樹模型進行分類。決策樹學習通常包括3個步驟:特征選擇

決策樹的生成決策樹的修剪。先介紹決策樹的基本概念,然後通過ID3和C4.5介紹特征的選擇、決策樹的生成以及決策樹的修剪,最後介紹CART算法。

決策樹模型:

決策樹:分類決策樹模型是一種描述對實例進行分類的樹形結構。決策樹由結點和有向邊組成,結點有兩種類型:內部結點和葉節點。內部結點表示一個特征或屬性,葉節點表示一個類。

決策樹與if-then規則:由決策樹的根節點到葉節點的每一條路徑構建一條規則;路徑上內部結點的特征對應著規則的條件,而葉節點的類對應著規則的結論。

決策樹與條件概率分布:決策樹還表示給定特征條件下類的條件概率分布,這一條件概率分布定義在特征空間的一個劃分(partition)上,將特征空間劃分為互不相交的單元或區域,並在每個單元定義一個類的概率分布就構成了一個條件概率分布。

決策樹學習:

決策樹學習,假設給定訓練數據集:

$$D = \{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}$$

其中,$x_i = (x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T$為輸入實例(特征向量),$n$為特征個數,$y_i \in \{1,2,...,K\}$為類標記,$i=1,2,...,N$,$N$為樣本容量。學習的目標是根據給定的訓練數據集構建一個決策樹模型,使它能夠對實例進行正確的分類。

決策樹學習的損失函數通常是正則化的極大似然函數。當損失函數確定後,學習問題就變成為在損失函數意義下選擇最優決策樹的問題。因為從所有可能的決策樹中選取最優決策樹是NP完全問題。所以現實中決策樹學習算法通常采用啟發式方法,近似求解這一最優化問題。

決策樹學習的算法通常是一個遞歸地選擇最優特征,並根據該特征對訓練數據進行分割,使得對各個子數據集有一個最好的分類的過程,這一過程對特征空間的劃分,也對應著決策樹的構建。

特征選擇:

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

信息增益:

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

熵,是表示隨機變量不確定性的度量。設$X$是一個取有限個值的離散隨機變量,其概率分布為:

$$P(X=x_i) = p_i, i=1,2,...,n$$

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

$$H(X) = - \sum_{i=1}^{n}p_ilogp_i$$

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

$$P(X=x_i,Y=y_j) = p_{ij}, i=1,2,...,n; j=1,2,...,m$$

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

$$H(Y|X) = \sum_{i=1}^{n}p_iH(Y|X=x_i)$$

這裏,$p_i = P(X=x_i), i=1,2,...,n.$

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

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

信息增益定義:

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

$$g(D,A) = H(D) - H(D|A)$$

一般地,熵$H(Y)$與條件熵$H(Y|X)$之差稱為互信息(mutual information)。決策樹學習中的信息增益等價於訓練數據集中類與特征的互信息。對於數據集$D$而言,信息增益依賴於特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更強的分類能力。

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

設訓練數據集為$D$,$|D|$表示其樣本容量,即樣本個數。設有$K$個類$C_k, k=1,2,...,K, |C_k|$為屬於類$C_k$的樣本個數,$\sum_{k=1}^{K}|C_k| = |D|$。設特征$A$有$n$個不同的取值${a_1,a_2,...,a_n}$,根據特征$A$的取值將$D$劃分為$n$個子集$D_1,D_2,...,D_n$,$|D_i|$為$D_i$的樣本個數,$\sum_{i=1}^{n}|D_i| = |D|$。記子集$D_i$中屬於類$C_k$的樣本的集合為$D_{ik}$,即$D_{ik} = D_i \bigcap C_k$,$|D_{ik}|$為$D_{ik}$的樣本個數。於是信息增益的算法如下:

信息增益的算法:

輸入:訓練數據集$D$和特征$A$;

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

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

$$H(D) = - \sum_{k=1}^{K}\frac{|C_k|}{|D|}log_{2}\frac{|C_k|}{|D|}$$

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

$$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|}$$

(3)計算信息增益

$$g(D,A) = H(D) - H(D|A)$$

信息增益比:

以信息增益作為劃分訓練數據集的特征,存在偏向於選擇取值較多的特征的問題。使用信息增益比(information gain ratio)可以對這一問題進行校正。這是特征選擇的另一準則。

信息增益比:特征$A$對訓練數據集$D$的信息增益比$g_{R}(D,A)$定義為其信息增益$g(D,A)$與訓練數據集$D$關於特征$A$的值的熵$H_{A}(D)$之比,即

$$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|}$,$n$是特征$A$取值的個數。

決策樹的生成:

首先介紹$ID3$的生成算法,然後再介紹C4.5中的生成算法(C4.5算法是十大算法之首)。這些都是決策樹學習的經典算法。

ID3算法:

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

輸出:決策樹$T$。

(1)若$D$中所有實例屬於同一類$C_k$,則$T$為單結點樹,並將類$C_k$作為該結點的類標記,返回$T$。

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

(3)否則,根據信息增益公式計算$A$中各特征對$D$的信息增益,選擇信息增益最大的特征$A_g$;

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

(5)否則,對$A_g$的每一個可能值$a_i$,依$A_g = a_i$將$D$分割為若幹非空子集$D_i$,將$D_i$中實例數最大的類作為標記,構建子結點,由結點及其子結點構成樹$T$,返回$T$;

(6)對第$i$個子結點,以$D_i$為訓練集,以$A-{A_g}$為特征集,遞歸地調用步(1)~步(5),得到子樹$T_i$,返回$T_i$。

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

C4.5的生成算法

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

輸出:決策樹$T$。

(1)若$D$中所有實例屬於同一類$C_k$,則$T$為單結點樹,並將類$C_k$作為該結點的類標記,返回$T$。

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

(3)否則,根據信息增益比公式計算$A$中各特征對$D$的信息增益比,選擇信息增益比最大的特征$A_g$;

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

(5)否則,對$A_g$的每一個可能值$a_i$,依$A_g = a_i$將$D$分割為若幹非空子集$D_i$,將$D_i$中實例數最大的類作為標記,構建子結點,由結點及其子結點構成樹$T$,返回$T$;

(6)對第$i$個子結點,以$D_i$為訓練集,以$A-{A_g}$為特征集,遞歸地調用步(1)~步(5),得到子樹$T_i$,返回$T_i$。

決策樹的剪枝:

決策樹生成算法遞歸地生產決策樹會存在過擬合問題,如何解決呢?考慮決策樹的復雜度,對已生成的決策樹進行簡化,這一過程稱為剪枝(pruning),具體地,剪枝從已經生成的樹上裁掉一些子樹或葉節點,並將其根節點或父節點作為新的葉節點,從而簡化分類樹模型。

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

$$C_{\alpha}(T) = \sum_{t=1}^{|T|}N_{t}H_{t}(T) + \alpha|T|$$

其中經驗熵為:

$$H_t(T) = - sum_{k}\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t}$$

在損失函數中,右端的第一項記作:

$$C(T) = \sum_{t=1}^{|T|}N_tH_t(T) = - \sum_{t=1}^{|T|}\sum_{k=1}^{K}N_{tk}log\frac{N_{tk}}{N_t}$$

這時有:

$$C_{\alpha}(T) = C(T) + \alpha|T|$$

其中,$C(T)$表示模型對訓練數據的預測誤差,即模型與訓練數據的擬合程度,$|T|$表示模型復雜度。

決策樹生成只考慮了通過提高信息增益(或信息增益比)對訓練數據進行更好的擬合。而決策樹剪枝通過優化損失函數還考慮了減小模型復雜度。決策樹生成學習局部的模型,而決策樹剪枝學習整體的模型。損失函數的極小化等價於正則化的極大似然估計,所以,利用損失函數最小化原則進行剪枝就是用正則化的極大似然估計進行模型選擇。

樹的剪枝算法:

輸入:生成算法產生的整個樹$T$,參數$\alpha$;

輸出:修剪後的子樹$T_{\alpha}$。

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

(2)遞歸地從樹的葉結點向上回縮。

設葉結點回縮到其父結點之前與之後的整體樹分別為$T_B$與$T_A$,其對應的損失函數值分別是$C_{\alpha}(T_B)$與$C_{\alpha}(T_A)$,如果

$$C_{\alpha}(T_A) \leq C_{\alpha}(T_B)$$

則進行剪枝,即將父結點變為新的葉結點。

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

CART算法:

分類與回歸樹(classification and regression tree, CART)模型,是應用廣泛的決策樹學習方法。CART同樣由特征選擇、樹的生成以及剪枝組成,既可以用於分類也可以用於回歸。以下將用於分類與回歸的樹統稱為決策樹。

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

CART算法由以下兩步組成:

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

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

CART生成:

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

最小二乘回歸樹生成算法:

輸入:訓練數據集D

輸出:回歸樹$f(x)$

在訓練數據集所在的輸入空間中,遞歸地將每個區域劃分為兩個子區域並決定每個子區域上的輸出值,構建二叉決策樹。

(1)選擇最優切分變量$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 ]$$

遍歷變量$j$,對固定的切分變量$j$掃描切分點$s$,選擇使上式達到最小值的對$(j,s)$。

(2)用選定的對$(j,s)$劃分區域並決定相應的輸出值:

$$R_1(j,s) = \{x|x^{(j)} \leq s\}, R_2(j,s)=\{x|x^{(j)} > s\}$$

$$\hat{c_m} = \frac{1}{N_{m}}\sum_{x_i \in R_m(j,s)}y_i, x\in R_m, m=1,2$$

(3)繼續對兩個子區域調用步驟(1),(2),直至滿足停止條件。

(4)將輸入空間劃分為$M$個區域$R_1,R_2,...,R_M$,生成決策樹:

$$f(x) = \sum_{m=1}^{M}\hat{c_m}I(x \in R_m)$$

分類樹的生成:

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

基尼指數定義:分類問題中,假設有$K$個類,樣本點屬於第$k$個類的概率為$p_k$,則概率分布的基尼指數定義為:

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

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

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

這裏,$C_k$是$D$中屬於第$k$類的樣本子集,$K$是類的個數。

如果樣本集合$D$根據特征$A$是否取某一可能值$\alpha$被分割成$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(D)$表示集合$D$的不確定性,基尼指數$Gini(D,A)$表示$A=a$分割後集合$D$的不確定性。基尼指數值越大,樣本集合的不確定性也就越大。

CART生成算法:

輸入:訓練數據集$D$,停止計算的條件

輸出:CART決策樹

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

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

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

(3)對兩個子結點遞歸地調用(1),(2),直至滿足停止條件

(4)生成CART決策樹。

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

CART剪枝:

從整體樹$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$充分小時,有不等式

$$C_{\alpha}(T_t) < C_{\alpha}(t)$$

當$\alpha$增大時,在某一$\alpha$有

$$C_{\alpha}(T_t) = C_{\alpha}(t)$$

當$\alpha$再增大時,$C_{\alpha}(T_t) > C_{\alpha}(t)$。只要$\alpha = \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)$設為$\alpha_{1}$。$T_1$為區間$[\alpha_1,\alpha_2)$的最優子樹。如此剪枝下去,直至得到根結點。在這一過程中,不斷地增加$\alpha$的值,產生新的區間。

CART剪枝算法:

輸入:CART算法生成的決策樹$T_0$;

輸出:最優決策樹$T_{\alpha}$;

(1)設$k=0,T=T_0$;

(2)設$\alpha = + \infty$。

(3)自下而上地對各內部結點$t$計算$C(T_t)$,$|T_t|$以及

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

$$\alpha = \min(\alpha,g(t))$$

這裏,$T_t$表示以$t$為根結點的子樹,$C(T_t)$是對訓練數據的預測誤差,$|T_t$是$T_t$的葉結點個數。

(4)對$g(t) = \alpha$的內部結點$t$進行剪枝,並對葉結點$t$以多數表決法定其類,得到樹$T$。

(5)設$k = k + 1,\alpha_k = \alpha, T_k = T$.

(6)如果$T_k$不是由根結點及兩個葉結點構成的樹,則回到步驟(3);否則令$T_k = T_n$。

(7)采用交叉驗證法在子樹序列$T_0,T_1,...,T_n$中選取最優子樹$T_{\alpha}$。

統計學習方法 學習筆記(十):決策樹