決策樹如何防止過擬合

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

提前停止

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章