CART分類與回歸樹 學習筆記


CART:Classification and regression tree,分類與回歸樹。(是二叉樹)

CART是決策樹的一種,主要由特征選擇,樹的生成和剪枝三部分組成。它主要用來處理分類和回歸問題,下面對分別對其進行介紹。

1、回歸樹:使用平方誤差最小准則

訓練集為:D={(x1,y1), (x2,y2), …, (xn,yn)}。

輸出Y為連續變量,將輸入划分為M個區域,分別為R1,R2,…,RM,每個區域的輸出值分別為:c1,c2,…,cm則回歸樹模型可表示為:

則平方誤差為:

假如使用特征j的取值s來將輸入空間划分為兩個區域,分別為:

我們需要最小化損失函數,即:

  其中c1,c2分別為R1,R2區間內的輸出平均值。(此處與統計學習課本上的公式有所不同,在課本中里面的c1,c2都需要取最小值,但是,在確定的區間中,當c1,c2取區間輸出值的平均值時其平方會達到最小,為簡單起見,故而在此直接使用區間的輸出均值。)

  為了使平方誤差最小,我們需要依次對每個特征的每個取值進行遍歷,計算出當前每一個可能的切分點的誤差,最后選擇切分誤差最小的點將輸入空間切分為兩個部分,然后遞歸上述步驟,直到切分結束。此方法切分的樹稱為最小二乘回歸樹。

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

1)依次遍歷每個特征j,以及該特征的每個取值s,計算每個切分點(j,s)的損失函數,選擇損失函數最小的切分點。

2)使用上步得到的切分點將當前的輸入空間划分為兩個部分

3)然后將被划分后的兩個部分再次計算切分點,依次類推,直到不能繼續划分。

4)最后將輸入空間划分為M個區域R1,R2,…,RM,生成的決策樹為:

其中cm為所在區域的輸出值的平均。

  總結:此方法的復雜度較高,尤其在每次尋找切分點時,需要遍歷當前所有特征的所有可能取值,假如總共有F個特征,每個特征有N個取值,生成的決策樹有S個內部節點,則該算法的時間復雜度為:O(F*N*S)

2、分類樹:使用基尼指數最小化准則

基尼指數:假如總共有K類,樣本屬於第k類的概率為:pk,則該概率分布的基尼指數為:

基尼指數越大,說明不確定性就越大。

對於二類分類:

使用特征A=a,將D划分為兩部分,即D1(滿足A=a的樣本集合),D2(不滿足A=a的樣本集合)。則在特征A=a的條件下D的基尼指數為:

Gini(D):表示集合D的不確定性。

Gini(A,D):表示經過A=a分割后的集合D的不確定性。

CART生成算法:

1)依次遍歷每個特征A的可能取值a,對每一個切分點(A, a)計算其基尼指數。

2)選擇基尼指數最小的切分點作為最優切分點。然后使用該切分點將當前數據集切分成兩個子集。

3)對上步切出的兩個子集分別遞歸調用1)和2),直至滿足停止條件。(算法停止的條件是樣本個數小於預定閥值,或者樣本集的基尼指數小於預定閥值或者沒有更多特征)

4)生成CART決策樹。

 

3、CART樹剪枝

  通過CART剛生成的決策樹我們記為T0,然后從T0的底端開始剪枝,直到根節點。在剪枝的過程中,計算損失函數:

  

  注:參數此處為了方便編輯使用a來表示。

  a>=0,C(T)為訓練數據的預測誤差,|T|為模型的復雜度。

  對於一個固定的a,在T0中一定存在一顆樹Ta使得損失函數Ca(T)最小。也就是每一個固定的a,都存在一顆相應的使得損失函數最小的樹。這樣不同的a會產生不同的最優樹,而我們不知道在這些最優樹中,到底哪顆最好,於是我們需要將a在其取值空間內划分為一系列區域,在每個區域都取一個a然后得到相應的最優樹,最終選擇損失函數最小的最優樹。

  現在對a取一系列的值,分別為:a0<a1<…<an<+無窮大。產生一系列的區間[ai,ai+1)。在每個區間內取一個值ai,對每個ai,我們可以得到一顆最優樹Tai。於是我們得到一個最優樹列表{T0,T1,…,Tn}。

  那么對於一個固定的a,如何找到最優的子樹?

  現在假如節點t就是一棵樹,一顆單節點的樹,則其損失函數為:

Ca(t)=C(t)+a*1

  對於一個以節點t為根節點的樹,其損失函數為:

Ca(Tt)=C(Tt)+a*|Tt|

  當a=0時,即沒有剪枝時,Ca(t) > Ca(Tt)。因為使用決策樹分類的效果肯定比將所有樣本分成一個類的效果要好。即使出現過擬合。

   然而,隨着a的增大,Ca(t)和Ca(Tt)的大小關系會出現變化(即Ca(t)- Ca(Tt)隨着a單調遞減。只是猜測,未經證明)。所以會出現Ca(t)= Ca(Tt),即t和Tt有相同的損失函數,而t的節點少,故而選擇t。

當Ca(t)= Ca(Tt)時,即:

  據上分析,在T0中的每個內部節點t,計算a的值,它表示剪枝后整體損失函數減少的程度。在T0中剪去a最小的子樹Tt,將得到的新的樹記為T1,同時將此a記為a1。即T1為區間[a1,a2)上的最優樹。

  a與損失函數之間的關系分析:當a=0時,此時未進行任何剪枝,因為產生過擬合,所以損失函數會較大,而隨着a的增大,產生的過擬合會慢慢消退,因而,損失函數會慢慢減小,當a增大到某一值時,損失函數會出現一個臨界值,因而a超過此臨界值繼續增大的話損失函數就會因而模型越來越簡單而開始增大。所以我們需要找到一個使損失函數最小的臨界點a。

  如何找到使損失函數最小的a呢?我們通過嘗試的方式,依次遍歷生成樹的每一個內部節點,分別計算剪掉該內部節點和不剪掉該內部節點時的整體損失函數,當這兩種情況的損失函數相等時,我們可以得到一個a,此a表示當前需要剪枝的最小a。這樣每個內部節點都能計算出一個a。此a表示整體損失函數減少的程度。

  那么選擇哪個a來對生成樹進行剪枝呢?我們選擇上面計算出的最小的a來進行剪枝。假如我們選擇的不是最小的a進行剪枝的話,則至少存在兩處可以剪枝的內部節點,這樣剪枝后的損失函數必然會比只剪枝一處的損失要大(這句話表述的可能不准確),為了使得損失函數最小,因而選最小的a來進行剪枝。

  在選出a之后,我們就需要計算該a對應的使損失函數最小的子樹。即從樹的根節點出發,逐層遍歷每個內部節點,計算每個內部節點處是否需要剪枝。剪枝完之后的樹便是我們所需要的樹。

 

CART剪枝算法:

1)設k=0,T=T0, a=+無窮大

2)自下向上地對各內部節點進行遍歷,計算C(Tt),|Tt|及g(t)

a=min(a, g(t));

3)自上向下訪問各內部節點t,若g(t)=a,則進行剪枝,並對t以多數表決的方式決定其類。得到樹T

4)若T不是由根節點單獨構成的樹,則重復步驟3)得到一系列的子樹。

5)最后使用交叉驗證的方式從子樹序列中選取最優子樹

 

參考文獻:

[1] 李航,統計學習方法。

 


免責聲明!

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



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