02-23 決策樹CART算法

[TOC] 更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlhtml

決策樹CART算法

決策樹C4.5算法雖然對決策樹ID3算法作了很大的改良,可是缺點也是很明顯的,沒法處理迴歸問題、使用較爲複雜的熵來做爲特徵選擇的標準、生成的決策樹是一顆較爲複雜的多叉樹結構,CART算法針對這些問題又作了進一步的優化。python

1、決策樹CART算法學習目標

  1. 基尼指數和熵
  2. CART算法對連續值和特徵值的處理
  3. CART算法剪枝
  4. 決策樹CART算法的步驟
  5. 決策樹CART算法的優缺點

2、決策樹CART算法詳解

CART的英文名全稱是classification and regression tree,因此有時候也把CART稱它爲分類迴歸樹,分類迴歸樹由特徵選擇、樹的生成以及剪枝組成,既能夠用於分類也能夠用於迴歸。算法

2.1 基尼指數和熵

# 基尼指數和熵示例圖
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

p = np.arange(0.001, 1, 0.001)
gini = 2*p*(1-p)
entropy = -(p*np.log2(p) + (1-p)*np.log2(1-p))/2
error = 1-np.max(np.vstack((p, 1-p)), 0)
plt.plot(p, entropy, 'r-', label='基尼指數')
plt.plot(p, gini, 'g-', label='熵之半$(1/2*H(p))$')
plt.plot(p, error, 'b-', label='分類偏差率')
plt.xlabel('p', fontproperties=font)
plt.ylabel('損失', fontproperties=font)
plt.legend(prop=font)
plt.show()

![png](http://www.chenyoude.com/ml/02-23 決策樹CART算法_7_0.png?x-oss-process=style/watermark)數據結構

上圖能夠看出二分類問題中基尼指數和熵的曲線很是接近,所以基尼指數能夠做爲熵的一個近似替代。而CART算法就是使用了基尼指數來選擇決策樹的特徵,同時爲了進一步簡化基尼指數的計算,CART算法每次對某個特徵進行二分,所以CART算法構造的決策樹是一顆二叉樹模型。機器學習

2.2 CART算法對連續值特徵的處理

CART算法相似於C4.5算法對連續值特徵的處理,只是CART算法使用基尼指數取代了信息增益比對連續值作了處理。函數

假設現有一個特徵$F$的特徵值爲連續值,從大到小排序爲$f_1,f_2,\ldots,f_m$,CART算法對相鄰樣本間的特徵值$f_i,f_{i+1}$取平均數,一共能夠獲得$m-1$個劃分點,其中第$j$個劃分點能夠表示爲學習

\[ S_j = {\frac {f_i + f_{i+1}} {2}} \]

對於這$m-1$個劃分點,分別計算以該點做爲二元分類點的基尼指數,選擇基尼指數最小的點做爲該連續特徵的二元離散分類點,把改點記做$f_t$,則特徵值小於$f_t$的點記做$c_1$;特徵值大於$f_t$的點記做$c_2$,這樣就實現了連續特徵值的離散化。測試

2.3 CART算法對離散值特徵的處理

CART算法對離散值特徵的處理採用的是不停的二分離散化特徵的思想。優化

假設一個訓練集$D$的某個特徵$F$有$f_1,f_2,f_3$三種類別。若是咱們使用的是ID3算法或者是C4.5算法,則會生成$3$個子節點,即三叉子節點,也所以致使決策樹變成一顆多叉樹。可是CART算法會基於這三個特徵造成$f_1$和$f_2,f_3$、$f_2$和$f_1,f_3$、$f_3$和$f_1,f_2$這三種組合,而且在這三個組合中找到基尼指數最小的組合,而後生成二叉子節點。網站

假設$f_1$和$f_2,f_3$在這三者中基尼指數最小,則生成的二叉作子節點爲$f_1$,二叉右子節點爲$f_2,f_3$。因爲右子節點並無被徹底分開,所以在以後會繼續求出$f_2$和$f_3$的基尼指數,而後找到最小的基尼指數來劃分特徵$F$。

2.4 CART算法剪枝

迴歸CART樹和分類CART樹剪枝策略除了在特徵選擇的時候一個使用了均方偏差,另外一個使用了基尼指數,其餘內容都同樣。

不管是C4.5算法仍是CART算法造成的決策樹都很容易對訓練集過擬合,所以可使用剪枝的方式解決過擬合問題,這相似於線性迴歸中的正則化。

CART算法採用的過後剪枝法,即先生成決策樹,而後產生全部可能的剪枝後的CART樹,而後使用交叉驗證來檢驗各類剪枝的效果,選擇返回泛化能力最好的剪枝方法。即CART樹的剪枝方法可分爲兩步:

  1. 使用原始的決策樹$T_0$從它的底端開始不斷剪枝,直到$T_0$的根節點生成一個子樹序列${T_0,T_1,\ldots,T_n}$
  2. 經過交叉驗證法選擇泛化能力最好的剪枝後的樹做爲最終的CART樹,即最優子樹

2.4.1 生成剪枝後的決策樹

在剪枝過程當中,子樹$T$的損失函數爲

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

其中$T$是任意子樹,$\alpha \quad \alpha\geq0$爲正則化參數,它權衡訓練數據的擬合程度與模型的複雜度;$C(T)\(是訓練數據的預測偏差(分類樹使用基尼指數度量,迴歸樹使用均方差度量),\)|T|$是子樹$T$的葉子節點的數量。

當$\alpha=0$時沒有正則化,即原始的決策樹爲最優子樹;當$\alpha$逐漸增大時,則正則化強度越大,生成的最優子樹相比較原生的子樹就越小;當$\alpha=\infty$時,即正則化強度達到最大,此時由原始的決策樹的根節點組成的單節點樹爲最優子樹。所以對於固定的$\alpha$,從子樹的損失函數中能夠看出必定存在使損失函數$C_\alpha(T)$最小的惟一子樹$T_a$,$T_a$在損失函數最小的意義下是最優的。

能夠遞歸的方法對書進行剪枝。將$\alpha$從小增大,$0=\alpha_0<\alpha_1<\cdots\alpha_n<+\infty$,產生一系列的區間$[\alpha_i,\alpha_{i+1}),i=0,1,\ldots,n$;剪枝獲得的子序列對應着區間$\alpha{\in}{[\alpha_i,\alpha_{i+1})}\(的最優子樹序列\){T_0,T_1,\ldots,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$充分小時(最優子樹爲原始的決策樹),有不等式

\[ 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$更可取,所以能夠對子樹$T_t$剪枝,也就是將它的子節點所有剪掉,變爲一個葉子節點$t$。

2.4.2 選擇最優子樹

上面說到能夠計算出每一個子樹是否剪枝的閾值$\alpha$,若是把全部的節點是否剪枝的值$\alpha$都計算出來,而後分別針對不一樣的$\alpha$所對應的剪枝後的最優子樹作交叉驗證,這樣就能夠選擇一個最優的$\alpha$,經過這個$\alpha$則能夠用對應的最優子樹做爲最終結果。

2.5 CART算法剪枝流程

2.5.1 輸入

假設如今有一個原始的決策樹$T_0$。

2.5.2 輸出

最優子樹$T_\alpha$。

2.5.3 流程

  1. 初始化$\alpha_=\infty$,最優子樹集合$s={T}$
  2. 自下而上的對各內部結點$t$計算$C(T_t)\(、\)|T_t|\(以及正則化閾值\)\alpha = min{\alpha_,g(t)={\frac{C(t)-C(T_t)}{|T_t|-1}}}$(注:$g(t)$由$t$和$T_t$的損失函數聯立獲得,即表示剪枝後總體損失函數的減小程度),而且更新$\alpha_=\alpha$。其中$T_t$表示以$t$爲根節點的子樹,$C(T_t)\(是訓練數據的預測偏差,\)|T_t|$是$T_t$的葉節點個數
  3. 獲得全部節點的$\alpha$值的集合$M$
  4. 從$M$中選擇最大的值$\alpha_i$,自上而下的訪問子樹$t$的內部節點,若是${\frac{C(t)-C(T_t)}{|T_t|-1}}\leq\alpha_i$(注:\(g(t)=C_\alpha(t)-C_\alpha(T_t)+\alpha\),若是$g(t)\leq\alpha$,則$C_\alpha(t)-C_\alpha(T_t)<0$,則$C_\alpha(t)<C_\alpha(T_t)$,則以$t$爲單節點的樹的偏差會更小),進行剪枝並決定葉節點的值。若是是分類樹,則是機率最高的類別;若是是迴歸樹,則是全部樣本輸出的均值或全部樣本的中位數。而後獲得$\alpha_i$對應的最優子樹$T_k$
  5. 最優子樹集合$s=s\bigcup$,\(M=M-{a_i}\)
  6. 若是$M$不爲空,回到步驟4,不然已經獲得了全部可能的最優子樹集合$s$
  7. 採用交叉驗證在$s$中選擇最優子樹$T_\alpha$

3、決策樹CART算法流程

3.1 輸入

假設有訓練數據集$D$,中止計算的條件:節點中的樣本個數小於預約閾值,或樣本集的基尼指數小於預約閾值,或沒有更多特徵。

3.2 輸出

CART樹

3.3 分類CART樹算法流程

CART算法從根節點開始,用訓練集遞歸的創建CART樹。

  1. 設節點的訓練集爲$D$,計算現有的全部特徵對該訓練集的基尼指數。此時對每個特徵$F$,對其可能取的每一個值$f$,根據樣本點對$F=f$的測試爲「是」或「否」將$D$分割成$D_1$和$D_2$兩個子集,利用基尼指數公式計算$F=f$時的基尼指數。
  2. 在全部可能的特徵$T$以及它們全部可能的切分點$t$中,選擇基尼指數最小的特徵與其對應的切分點做爲最優切分點,依據該最優切分點切割,生成兩個子節點,左子節點爲$D_1$,右子節點爲$D_2$。
  3. 對兩個子節點遞歸調用步驟$1-2$,直至知足中止條件生成一顆完整的二叉CART決策樹。
  4. 對生成的分類CART決策樹作預測的時候,若是測試集裏的某個樣本$A$落到了某個葉子節點,該葉子節點裏存在多個類別的訓練樣本,則機率最大的訓練樣本則是樣本$A$的類別。

3.4 迴歸CART樹算法流程

迴歸CART樹和分類CART樹的創建算法和過程大部分是相同的,因此本文只討論二者生成決策樹的區別,二者的區別有如下兩點

  1. 迴歸CART樹和分類CART樹最大的區別在於樣本輸出,若是輸出的是離散值,則它是一顆分類樹;若是輸出的是連續值,則它是一顆迴歸樹。
  2. 二者的區別在於對連續值處理的方式不一樣以及決策樹創建後作預測的方式不一樣。

3.4.1 處理連續值

分類CART樹用基尼指數最小化準則,而回歸CART樹用均方偏差最小化準則做爲特徵和劃分點選擇的方法。

對任意的劃分特徵$F$,對應的任意劃分點$s$把訓練集$D$劃分紅兩個子集$D_1$和$D_2$,求出使得兩個子集$D_1$和$D_2$以及兩個子集之和的均方差最小的對應劃分點$s$特徵$F$和劃分點$s$,即

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

其中已經假設樣本按照某個特徵$F$和劃分點$s$劃分紅功,則輸入一個$x$會有一個輸出值$c_m$。$c_1$則是$D_1$數據集中全部的$x$的樣本輸出均值,$c_2$是$D_2$數據集中全部的$x$的樣本輸出均值。

使用該方法生成的迴歸CART樹一般稱做最小二乘迴歸樹(least squares regression tree)。

3.4.2 預測結果

分類CART樹選擇機率最大的類別做爲樣本$A$的類別的方式不一樣的是:迴歸CART樹因爲輸出的不是類別,而是一個連續值,所以它一般採用的是使用最終葉子的均值或者中位數來預測輸出結果。

4、決策樹CART算法優缺點

4.1 優勢

  1. 既能夠作分類又能夠作迴歸

4.2 缺點

  1. 你要說缺點其實還真的有,CART算法作特徵分類決策的時候是由某一個特徵決定的,而真實狀況應該是由一組特徵決定的,這樣決策獲得的決策樹更加準確,這個決策樹叫作多變量決策樹(mutil-variate decision tree),這個算法的表明是OC1,這裏很少贅述。

5、小結

CART樹是決策樹的一次創新,摒棄了信息熵使用了基尼指數,基於C4.5算法能夠處理迴歸問題,可使用剪枝防止過擬合,解釋型強。

CART樹能夠說是完美的,可是它最大的一個問題就是CART算法會把全部的特徵所有用於構造決策樹中,這對於生成決策樹來說是一個很是大的問題,在集成學習中使用隨機森林將能一點程度的減輕該問題。

因爲隨機森林屬於集成學習,因此下一篇很遺憾的告訴你不是講隨機森林,而將帶你走入機率的天堂,即樸素貝葉斯法。

相關文章
相關標籤/搜索