決策樹如何防止過擬合

  • 2019 年 10 月 3 日
  • 筆記

決策樹在長成的過程中極易容易出現過擬合的情況,導致泛化能力低。主要有兩種手段可以用於防止過擬合。

提前停止

Early Stopping,在完全長成以前停止,以防止過擬合。主要有以下3種方式:

  1. 限制樹的高度,可以利用交叉驗證選擇
  2. 利用分類指標,如果下一次切分沒有降低誤差,則停止切分
  3. 限制樹的節點個數,比如某個節點小於100個樣本,停止對該節點切分

後剪枝

提前停止的不足

「提前停止」是一個不錯的策略,但是在實際的執行中會越到一些麻煩。比如「其中的第2點,如果下一次切分沒有降低誤差,則停止切分。」一看貌似很有道理,但是很容易舉出反例:

對一個XOR的數據集生成決策樹:
-w573

下面如果使用x[1]切分:
-w569

又或者用x[2]切分:
-w554

發現,無論選擇哪一個維度進行切分都不會使得訓練誤差降低了。所以根據Early Stopping,僅僅長成只有一個節點的stump。但是實際上:
-w560

繼續切下去,能學成一顆具有良好區分度的決策樹。所以「提前停止」的第2種情況既有利也有弊:
-w395

剪枝

我們通過一顆決策樹的葉子結點個數來定義這棵樹有多複雜。
-w491

但是樹太簡單也不好,訓練誤差太大,欠擬合。所以,訓練出一顆好的決策樹就是在樹的訓練誤差與複雜程度之間做權衡。
-w422

寫成數學公式,可以表示為:
-w418
-w451

剪枝演算法

舉例說明

有一顆已經長成的樹:
-w368

從底部開始考慮,第一個要檢查的切分點是Term:
-w443

假設懲罰性lambda是0.3:

  • 對於未剪枝的T,計算它的訓練誤差為0.25,葉子結點總數為6.所以總的cost為0.43
  • 對於剪去Term的Tsamller,計算它的訓練誤差為0.26,葉子結點總數為5.所以總的cost為0.41
  • 因為剪去後的樹的損失更小。所以決定剪枝。
  • 接著對於所有的切分節點做上述相同的動作。

演算法

-w393