【分類算法】決策樹(Decision Tree)


(注:本篇博文是對《統計學習方法》中決策樹一章的歸納總結,下列的一些文字和圖例均引自此書~)

  決策樹(decision tree)屬於分類/回歸方法。其具有可讀性、可解釋性、分類速度快等優點。決策樹學習包含3個步驟:特征選擇、決策樹生成、決策樹修剪(剪枝)。

0 - 決策樹問題

0.0 - 問題描述

  假設訓練集為

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

其中$x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)})^T$為輸入實例(特征向量),$n$為特征個數,$y_i \in \{1,2,\cdots,K\}$為類標記,$i=1,2,\cdots, N$為樣本容量。根據訓練集構建一個決策樹模型,使得能夠對於輸入$x_i$,給出預測的分類$y_i$。

0.1 - 決策樹思想

  決策樹學習通常是一個遞歸選擇最優特征,並根據該特征對訓練數據機型分割,使得對各個之數據集有一個最好的分類的過程。其算法可以描述為如下過程:

  • step 0:如果特征數量很多,可以先在決策樹學習開始之前對特征進行篩選,只留下對訓練數據有足夠分類能力的特征,其實就是數據降維(此步不是必須的!)
  • step 1:構建根結點,將所有訓練數據都放在根結點
  • step 2:選擇一個最優特征,按照這一特征把當前結點的數據分割成子集。如果這些子集已經能夠基本正確分類,轉step 3;否則,對於每一個結點,轉step 2
  • step 3:將該節點構建成葉結點
  • step 4:在決策樹構造完成之后,需要對決策樹自下而上進行剪枝,將樹變得更加簡單,從而使得它具有更好的泛化能力(具體就是去掉過於細分的葉結點,使其回退到父結點,甚至更高的結點,然后將父結點或更高的結點改為新的葉結點)

  經過上述過程之后,所有訓練數據都被分到葉結點上,即都有了明確的分類,這就生成了一顆決策樹。注意到,對於訓練集能夠進行正確分類的決策樹可能有多個,也可能沒有,我們需要的只是一個與訓練集矛盾較小的決策樹,同時具有很好的泛化能力(不僅僅對訓練集有好的擬合,對測試集也應該有很好的預測)。從所有可能的決策樹中選取最優決策樹是NP完全問題,因此在實際中的決策樹學習算法通常采用啟發式方法,近似求解這一最優化問題,這樣子得到的決策樹是次最優的。

1 - 特征選擇

  首先需要注意到,如果利用一個特征進行分類的結果與隨機分類的結果沒有很大差別,則稱這個特征是沒有分類能力的。經驗上扔掉這樣的特征對決策樹學習的精度影響不大。可以通過信息增益、信息增益比以及基尼系數來作為特征選擇的准則。在介紹特征選擇算法之前,需要先明確熵、條件熵、信息增益、信息增益比以及基尼系數幾個概念。

1.0 - 熵

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

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

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

$$H(X)=-\sum_{i=1}^{n}p_i\ log\ p_i,$$

注意到,熵只依賴於$X$的分布,而與$X$的取值無關,所以也可將$X$的熵記作$H(p)$,即

$$H(p)=-\sum_{i=1}^{n}p_i\ log\ p_i,$$

熵越大,隨機變量的不確定性就越大。

(注:當熵的概率由數據估計(特別是極大似然估計)得到時,稱為經驗熵(empirical entropy))

  舉例,當$X$只取兩個值時(取0和1),則$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)$$

此時$H(p)$隨$p$變化曲線如下圖所示。可以看到,當$p=0$或$p=1$時,$H(p)=0$,隨機變量完全沒有不確定性;當$p=0.5$時,$H(p)=1$,此處熵最大,隨機變量不確定最大。

1.1 - 條件熵

  定義(條件熵):假設有隨機變量$(X,Y)$,其聯合分布為

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

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

$$H(Y|X)=\sum_{i=1}^nP(X=x_i)H(Y|X=x_i),\ i=1,2,\cdots,n$$

(注:當條件熵的概率由數據估計(特別是極大似然估計)得到時,稱為條件經驗熵(empirical conditional entropy))

1.2 - 信息增益

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

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

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

1.3 - 信息增益比

  信息增益值得大小取決於訓練數據,沒有絕對意義。比如在分類問題困難的是否,訓練集本身的經驗熵就很大,從而使得信息增益值也偏大。反之,信息增益值會偏小。可以使用信息增益比(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)}$$

1.4 - 基尼系數

  基尼系數代表了不純度,假設有$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\left ( \frac{\left | C_k \right |}{\left | D \right |}\right )^2,$$

其中$C_k$是$D$中屬於第$k$類的樣本子集,$K$是類的個數。如果樣本集合$D$根據特征$A$是否取某一可能值$a$被分割成$D_1$和$D_2$兩部分,即

$$D1=\{(x,y)\in D|A(x)=a\},\ D_2=D-D_1,$$

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

$$Gini(D, A)=\frac{\left | D_1 \right |}{\left | D \right |}Gini(D_1)+\frac{\left | D_2 \right |}{\left | D \right |}Gini(D_2),$$

在二類分類中基尼指數與熵之半和分類誤差率的關系如下圖所示。可以看出基尼指數和熵之半的曲線很接近,並且基尼指數的二元運算比熵中的對數運算簡單很多,因此在度量意義上可以用來代替熵。

1.5 - 特征選擇原則

  決策樹學習過程中需要利用信息增益或信息增益比或基尼系數選擇特征。

  比如在ID3和C4.5算法中,給定訓練數據集$D$和特征$A$,經驗熵$H(D)$表示對數據集$D$進行分類的不確定性,而經驗條件熵$H(D|A)$表示在特征$A$給定的條件下對數據集$D$進行分類的不確定性。那么他們之間的差(信息增益)或者進一步的校正(信息增益比),就是表示由於特征$A$而使得對數據集$D$的分類的不確定性減少的程度。

  而在CART算法中,采用了基尼系數代替了信息增益(或信息增益比)來選擇特征。

  因此,在ID3、C4.5和CART算法中,特征選擇的原則是,選擇信息增益(信息增益比)更大的特征或激勵系數最小的特征,這樣子的特征具有更強的分類能力。

2 - 決策樹的生成

2.0 - ID3算法

  ID3算法采用信息增益作為特征選擇的依據。

  輸入:數據集$D$,特征集$A$,停止計算的條件。

  輸出:決策樹$T$。

  其算法過程可描述如下:

  • step 1:若$D$中所有實例都屬於同一個類別$C_k$,則$T$為單結點樹,並將類$C_k$作為該結點的類標記,返回$T$;
  • step 2:若$A=\phi$,則$T$為單結點樹,並將$D$中實例數量最大的類$C_k$作為該結點的類標記,返回$T$;
  • step 3:計算$A$中各個特征對於$D$的信息增益,選取信息增益最大的特征$A_g$‘
  • step 4:如果當前結點滿足停止計算的條件,則置$T$為單結點樹,並將$D$中實例數最大的類$C_k$作為該結點的類標記,返回$T$;
  • step 5:否則,根據特征$A_g$將$D$分割成若干個非空子集$D_i$(每個特征值一分割),構建子結點,由結點及其子結點構成數$T$,返回$T$;
  • step 6:對第$i$個直接點,以$D_i$為訓練集,以$A-\{A_g\}$為特征集,遞歸地調用step 1~step 5,得到子樹$T_i$,返回$T_i$。

2.1 - C4.5算法

  C4.5算法相比於ID3,做了如下改進:

  1. 首先修改了ID3的特征選擇方式,改成采用信息增益比選擇特征;
  2. 其次C4.5還將特征類型從只能選擇離散型推廣到可以選擇連續型。

  下述算法只考慮特征為離散的情況,連續的情況后面會簡單進行描述,不做重點闡述。

  輸入:數據集$D$,特征集$A$,停止計算的條件。

  輸出:決策樹$T$。

  其算法過程可描述如下:

  • step 1:若$D$中所有實例都屬於同一個類別$C_k$,則$T$為單結點樹,並將類$C_k$作為該結點的類標記,返回$T$;
  • step 2:若$A=\phi$,則$T$為單結點樹,並將$D$中實例數量最大的類$C_k$作為該結點的類標記,返回$T$;
  • step 3:計算$A$中各個特征對於$D$的信息增益比,選取信息增益比最大的特征$A_g$‘
  • step 4:如果當前結點滿足停止計算的條件,則置$T$為單結點樹,並將$D$中實例數最大的類$C_k$作為該結點的類標記,返回$T$;
  • step 5:否則,根據特征$A_g$將$D$分割成若干個非空子集$D_i$(每個特征值一分割),構建子結點,由結點及其子結點構成數$T$,返回$T$;
  • step 6:對第$i$個直接點,以$D_i$為訓練集,以$A-\{A_g\}$為特征集,遞歸地調用step 1~step 5,得到子樹$T_i$,返回$T_i$。

2.2 - CART算法(分類樹)

  不同於ID3和C4.5,CART算法采用基尼指數作為特征分割的依據,並且CART算法構建的是二叉樹。

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

  輸出:CART決策樹$T$。

  • step 1:設當前結點的訓練數據為$D$,計算現有特征對該數據集的基尼指數。根據每一個特征$A$,對於其可能的取值$a$,根據樣本點對$A=a$成立的“是”或者“否”將$D$分割成$D_1$和$D_2$兩部分,計算$A=a$的基尼指數;
  • step 2:在所有可能的特征$A$以及它們所有可能的切分點$a$中,選擇基尼指數最小的特征及對應的切分點最為最優特征和最優切分點,生成兩個子結點,並將數據集根據最優特征和最優切分點分配到兩個子結點中;
  • step 3:對兩個子結點遞歸調用step 1~step 2,直到滿足停止條件,返回決策樹$T$。

2.3 - CART算法(回歸樹)

  回歸樹的構建過程與分類樹類似,這里只列出與分類樹的幾點不同:

  1. 輸出不同。分類樹輸出的是離散值,回歸樹輸出的是連續值。具體的,分類樹采用的是葉子結點里面概率最大的類別作為該結點的預測(離散值),回歸樹采用的是葉子結點的均值或者中位數來預測(連續值);
  2. 特征分割依據不同。分類樹采用的是基尼指數進行分割度量,回歸樹采用的是如下表達式進行分割度量(其表示使得分割后的$D_1$和$D_2$各自集合的均方差最小且$D_1$和$D_2$的均方差之和最小)。

$$\underbrace{min}_{A,s}\left [ \underbrace{min}_{c_1}\sum_{x_i\in D_1(A,s)}(y_i-c_1)^2+\underbrace{min}_{c_2}\sum_{x_i\in D_2(A,s)}(y_i-c_2)^2\right ]$$

3 - 決策樹的剪枝

  采用決策樹生成算法生成的決策樹可能存在分類過細,過擬合訓練數據的問題,為了提高泛化能力,可以對通過預剪枝和后剪枝等剪枝方法來得到低復雜度的決策樹。

3.0 - 預剪枝

  預剪枝在決策樹生成過程中通過提前停止樹(如決定某一個結點不再分裂下去)的構造而達到剪枝目的(對應於上一節描述決策樹生成中的“停止計算的條件”)。一般的預剪枝方法有如下幾種:

  1. 限定一個高度,當樹達到這個高度之后就停止決策樹的生長;
  2. 到達此節點的特征組合符合某一個限制,停止決策樹的生長;
  3. 到達此節點的實例個數小於某一個閾值,停止決策樹的生長;
  4. 計算繼續生長對於整體決策樹的增益,如果小於某一個閾值,停止決策樹生長。

3.1 - 后剪枝

  后剪枝是在決策樹生成之后再進行剪枝,即由完全成長的樹剪去子樹形成。對於ID3、C4.5的后剪枝方法和對於CART的后剪枝方法有所區別,下述將分開描述。

3.1.0 - ID3和C4.5的后剪枝

  常用的對於ID3和C4.5的后剪枝方法是通過極小化決策樹整體的損失函數來實現。其中損失函數定義為

$$C_{\alpha}(T)=\sum_{t=1}^{\left |T\right|}N_tH_t(T)+\alpha\left| T\right |$$

其中$\left| T \right |$表示樹$T$的葉結點個數,$t$是樹$T$的葉結點,該葉結點有$N_t$個樣本,$H_t(T)$為葉結點$t$上的經驗熵,$\alpha\geq 0$是一個權衡決策樹在訓練集上精度以及自身復雜的的參數。

  對於第$t$個葉結點,其中$k$類的樣本點有$N_{tk}$個,$k=1,2,\cdots,K$,則該葉結點的經驗熵可以描述為

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

  則損失函數可以寫成如下形式

$$C_{\alpha}(T)=\sum_{t=1}^{\left |T\right|}N_tH_t(T)+\alpha\left| T\right |=\sum_{t=1}^{\left |T\right|}N_t\left (-\sum_{k=1}^K\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t} \right )+\alpha\left| T\right |=-\sum_{t=1}^{\left | T\right |}\sum_{k=1}^{K}N_{tk}log\frac{N_{tk}}{N_t}+\alpha\left| T\right |=C(T)+\alpha\left| T\right |,$$

其中,$C(T)$表示該決策樹對於訓練數據的預測誤差,$\left | T\right |$表示模型的復雜度。因此,當選取較大的$\alpha$時,可以促使選擇較簡單的模型(樹);當選取較小的$\alpha$時,可以促使選擇較復雜的模型(樹)。

  該剪枝算法可描述如下,

  輸入:決策樹生成算法生成的決策樹$T$,參數$\alpha$

  輸出:剪枝之后的子樹$T_{\alpha}$

  • step 1:計算每個結點的經驗熵;
  • step 2:遞歸從樹的葉結點向上回縮。設回縮之前的樹為$T_A$,回縮之后的樹為$T_B$,如果有$C_{\alpha}(T_B)\leq C_{\alpha}(T_A)$,則進行剪枝(即將當前結點的父結點變為新的葉結點);
  • step 3:不斷遞歸step 2,直到不能繼續為止,得到使得損失函數$C_{\alpha}$最小的樹$T_{\alpha}$,返回$T_{\alpha}$。

3.1.1 - CART的后剪枝

  CART計算子樹的損失函數為

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

其中$C(T)$為對訓練數據的預測誤差(分類樹是基尼指數,回歸樹是均方誤差),其他參數與ID3和C4.5的損失函數的參數意義相同。

3.1.1.0 - 思路

  這里有一個需要先說明的前提:對於固定的$\alpha$,一定存在使得損失函數$C_{\alpha}(T)$最小的子樹,將其表示為$T_{\alpha}$,並且這樣子的最優子樹是唯一的。當$\alpha$大的時候,最優子樹$T_{\alpha}$偏小(樹比較簡單);當$\alpha$小的時候,最優子樹$T_{\alpha}$偏大(樹比較復雜)。考慮極端情況,當$\alpha=0$時,整體樹是最優的。當$\alpha\rightarrow\infty$時,根節點組成的單結點樹是最優的。

  因此,可以將$\alpha$從小增大,$0<\alpha_0<\alpha_1<\cdots<\alpha_n<+\infty $,產生一系列的區間$[\alpha_i,\alpha_{i+1}),i=0,1,\cdots,n$;對於每一個區間剪枝到一個最優子樹,因此可以產生一個最優子樹序列$\{T_0,T_1,\cdots,T_n\}$。

  具體的,考慮位於結點$t$的一顆子樹$T_t$,如果沒有剪枝,損失函數為

$$C_{\alpha}(T_t)=C(T_t)+\alpha\left | T_t \right |,$$

如果將子樹剪掉,只保留當前結點,則損失函數為

$$C_{\alpha}(t)=C(t)+\alpha,$$

當$\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)}{\left | T_t \right | - 1}$時,$C_{\alpha}(T_t)=C_{\alpha}(t)$成立,而$t$比$T_t$具有更少的結點,更簡單,因此對$T_t$進行剪枝。

3.1.1.1 - 算法

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

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

  算法過程描述如下

  • step 1:初始化$\alpha_{min}=\infty$,最優子樹集合$\omega=\{T\}$
  • step 2:從葉子結點開始自下而上計算結點$t$的訓練損失函數$C_{\alpha}(T_t)$(分類樹為基尼指數,回歸樹為均方誤差),葉子結點數為$\left | T_t \right |$,正則化更新為$\alpha=min\{\frac{C(t)-C(T_t)}{\left | T_t \right | - 1},\alpha_{min}\}$,更新$\alpha_{min}=\alpha$
  • step 3:得到所有結點的$\alpha$值集合$M$
  • step 4:從$M$中選擇最大的值$\alpha_k$,自上而下訪問子樹$t$的內部結點,如果$\frac{C(t)-C(T_t)}{\left | T_t \right | - 1}\leq \alpha_k$時,進行剪枝(注意到,剪枝之后需要更新當前結點的值,分類樹為概率最高的類別,回歸樹為所有樣本的均值)。這樣子可得到$\alpha_k$對應的最優子樹$T_k$
  • step 5:最優子樹集合$\omega=\omega\ \cup\ T_k$,$M=M-\{\alpha_k\}$
  • step 6:如果$M$不為空,回到step 4。否則已經得到所有可能的可選最優子樹集合$\omega$
  • step 7:采用交叉驗證在$\omega$選取最優子樹$T_{\alpha}$

4 - 決策樹的對比

  對於上述描述的ID3、C4.5和CART決策樹的總結對比如下:

決策樹算法 特征類型 不純度度量 子結點數量 目標類型
ID3 離散型 信息增益 $K\geq 2$ 離散型
C4.5 離散型、連續型 信息增益比 $K\geq 2$ 離散型
CART 離散型、連續型 Gini指數 $K=2$ 離散型、連續型

  上述討論的決策樹算法均在離散特征值的前提下,上表顯示,C4.5和CART算法都可以對連續型特征值生效,這里只簡單介紹一下對於連續特征值需要怎么處理。

  對於連續特征的處理方法為:將連續屬性進行排序(升序),再將其轉換成離散屬性(即對連續屬性進行有限采樣),例如在當前結點對於當前屬性有$N$種離散化方法,取一個落於屬性中的閾值$\theta$,對於這$N$種離散化方法,均規定將采樣后的值若$\leq \theta$則分到左子樹,否則分到右子樹,再計算每一種離散化方法的信息增益(或者基尼指數或均方差),最后選取具有最大的信息增益(或者基尼指數或均方差)的離散化方法及$\theta$作為此節點的分割依據。

5 - 總結

  • 決策樹生成之后可以轉換成IF-THEN規則的集合,可解釋性較好
  • 決策樹模型不穩定,方差大,訓練集的改變容易導致性能的波動(可以通過集成方法解決)
  • 決策樹采用貪婪算法的思想,每次分裂時只考慮當前情況下能帶來最好的屬性分裂,容易陷入局部最優

6 - 參考資料

《統計學習方法》,李航

https://blog.csdn.net/zhangbaoanhadoop/article/details/79904091

https://www.cnblogs.com/keye/p/10564914.html


免責聲明!

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



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