數據挖掘實踐(51):決策樹cart剪枝實例


 

來源:https://zhuanlan.zhihu.com/p/76709712

0 簡介

CART剪枝算法從"完全生長"的決策樹的底端剪去一些子樹,使決策樹變小(模型變簡單),從而能夠對未知數據有更准確的預測。

分兩步:

  1.從生產算法產生的整體的樹 [公式] 的最底端開始不斷剪枝,直至剪到整個樹 [公式] 的根結點為止,從而形成了一個子樹序列 [公式] ;

  2.通過交叉驗證法在獨立的驗證數據集上對子樹序列進行測試,從中選出最優子樹。

1.剪枝,形成一個子樹序列

剪枝剪枝,怎么來剪?

  從前面第4節將的剪枝內容來看,我們需要整一個損失函數來控制剪枝。

  這個損失函數為: [公式]

  其中,T任意子樹, [公式] 為對訓練數據的預測誤差(如基尼指數), [公式] 為子樹的葉結點個數,表示樹的復雜度的。 [公式] 為參數, [公式] 為參數是 [公式] 時的子樹T的整體損失。

參數 [公式] 權衡訓練數據的擬合程度與模型的復雜度。

  上述關於損失函數的定義,在前面的章節中已經介紹的非常多了,看過前面的這部分就不難理解。以后的章節中,如果遇到前面詳細介紹過的內容,除非必要,就都不啰嗦了。

  對固定的一個 [公式] 值,一定存在使損失函數 [公式] 最小的子樹,將其表示為 [公式] 。這個 [公式] 取值越大,最優子樹就偏向於簡單地子樹(即葉結點少), [公式] 取值越小,最優子樹偏向於與訓練數據集更好地擬合。我們可以想象一個極端情況,當 [公式] 時,最優子樹是根結點構成的單結點樹;當 [公式] 時,最優子樹就是整體樹本身。(這個一定要結合上面的損失函數公式來理解)。

  Breiman(CART提出者)等人證明:可以用遞歸的方法對樹進行剪枝。什么意思呢?就是將 [公式] 從0開始逐漸增大, [公式] ,產生一系列的區間 [公式] ;對每一個 [公式] 取值,都能得到一個最優子樹,最終得到對應的最優子樹集 [公式] ,序列中 [公式] 是整樹,一直到 [公式] (根結點構成的單結點樹),是嵌套的。子樹序列對應着區間 [公式] 。

 

 

 

 

 

 

 

 整個剪枝過程的示意圖如上。接下來我們來看看具體數學過程是怎樣的。

從整體樹 [公式] 開始剪枝。對於 [公式] 的任意內部結點t(除葉結點外的所有結點,包括根結點),計算以t為單結點樹的損失函數:

如下圖

 

 然后計算以t為根結點的子樹 [公式] 的損失函數:

 

 如下圖

 

 

接下來進行 [公式] 的比較:

1) 當 [公式] ,有不等式

[公式]

意思是,此時如果保留這個子樹,得到的總的損失函數是會比剪掉它更小的,所以我們選擇保留子樹不剪。

2) 當 [公式] 增大時,在某一 [公式] 值時有

[公式]

此時,由公式可以推出: [公式] 。 [公式] 在這時取相同的損失函數值。但由於t的結點少,因此t比 [公式] 更可取,故應對子樹 [公式] 進行剪枝。

3) 當 [公式] 再增大時,1)中的不等式反向,即

[公式]

此時就應該再取下一個內部結點,進行下一步剪枝判斷了。

對 [公式] 中每一內部結點t,計算:

[公式] (即對應着不同的 [公式] 取值)

  這個g(t)表示剪枝后整體損失函數減少的程度。在 [公式] 中減去g(t)值最小的子樹 [公式] ,將得到的剩下的子樹作為 [公式] ,同時將最小的g(t)設為 [公式] 。 [公式] 為區間 [公式] 的最優子樹。

  如此剪枝下去,直至得到根結點。在這一過程中,不斷地增加 [公式] 的值,得到更小的子樹,產生新的區間。就得到了最優子樹序列, [公式] ,剪枝后對新的葉結點t以多數表決法決定其類。

 

2.在剪枝得到的子樹序列 [公式] 中通過交叉驗證選取最優子樹 [公式]

  利用獨立的驗證數據集,測試子樹序列 [公式] 中各棵子樹的平方誤差或基尼指數。選擇平方誤差或基尼指數最小的決策樹作為最優的決策樹。在子樹序列中,每棵子樹 [公式] 都對應於一個參數 [公式] 。所以,當最優子樹 [公式] 確定時,對應的 [公式] 也確定了,即得到最優決策樹 [公式] 。

 


免責聲明!

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



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