決策樹的剪枝是將生成的樹進行簡化,以避免過擬合。
《統計學習方法》上一個簡單的方式是加入正則項a|T|,其中|T|為樹的葉節點個數。
其中C(T)為生成的決策樹在訓練集上的經驗熵,經驗熵越大,表明葉節點上的數據標記越不純,分類效果越差。有了這個標准,拿到一顆生成好的樹,我們就遞歸的判斷一組葉節點,看它回縮前和回縮后的代價函數變化。如果代價函數回縮后變小,那么久回縮這組葉節點。當所有葉節點都進行過回縮測試后,剪枝也就完成了。
西瓜書(《機器學習》周志華)上給出了另外一種剪枝策略,即“留出法”,預留一部分數據用作“驗證集”以進行性能評估。預留法以決策樹在驗證集上預測精度為是否剪枝的標准,執行順序上分為預剪枝和后剪枝。預剪枝是邊生成樹邊剪枝,訓練速度快,但容易欠擬合;后剪枝是完全生成后再從底向上剪枝,得出的模型泛化性能好,但訓練時間需要更久。
《統計學習方法》一書上還介紹CART算法的剪枝算法,個人覺得是訓練集上剪枝與后剪枝的結合。運算量比較大,但擬合效果應該是最好的。
CART剪枝應該是對驗證集不同的適應方法(對比后剪枝),好處應該是在適應驗證集的基礎上保留對訓練集的適應。勉強說,后剪枝和CART的剪枝比起來,也是局部和全局的關系。
在迭代求T1, T2...的過程中,alpha值不斷變大,也就意味着對樹的簡化越來越多,對訓練集的擬合程度越來越差;而通過驗證集從這一系列樹中選擇一顆,也就是通過驗證集來選擇對生成樹的簡化程度,而選擇的同時也盡可能保證了簡化后的樹對訓練集的擬合程度。
而后剪枝這種剪枝方法就比較暴力了,直接在生成樹的基礎上從底向上收,唯一的依據是生成樹對驗證集的預測准確度。這樣的暴力剪枝雖然也減低了模型的復雜度,但沒有考慮剪枝后的樹對訓練集的適應情況,對訓練集的擬合程度下降的比較厲害。