什么是剪枝?
剪枝是指將一顆子樹的子節點全部刪掉,根節點作為葉子節點,以下圖為例:
為甚么要剪枝?
決策樹是充分考慮了所有的數據點而生成的復雜樹,有可能出現過擬合的情況,決策樹越復雜,過擬合的程度會越高。
考慮極端的情況,如果我們令所有的葉子節點都只含有一個數據點,那么我們能夠保證所有的訓練數據都能准確分類,但是很有可能得到高的預測誤差,原因是將訓練數據中所有的噪聲數據都”准確划分”了,強化了噪聲數據的作用。
剪枝修剪分裂前后分類誤差相差不大的子樹,能夠降低決策樹的復雜度,降低過擬合出現的概率。
怎樣剪枝?
兩種方案:先剪枝和后剪枝
先剪枝說白了就是提前結束決策樹的增長,跟上述決策樹停止生長的方法一樣。
后剪枝是指在決策樹生長完成之后再進行剪枝的過程。這里介紹三種后剪枝方案:
(1)REP—錯誤率降低剪枝
顧名思義,該剪枝方法是根據錯誤率進行剪枝,如果一棵子樹修剪前后錯誤率沒有下降,就可以認為該子樹是可以修剪的。
REP剪枝需要用新的數據集,原因是如果用舊的數據集,不可能出現分裂后的錯誤率比分裂前錯誤率要高的情況。由於使用新的數據集沒有參與決策樹的構建,能夠降低訓練數據的影響,降低過擬合的程度,提高預測的准確率。
(2)PEP—悲觀剪枝
悲觀剪枝認為如果決策樹的精度在剪枝前后沒有影響的話,則進行剪枝。怎樣才算是沒有影響?如果剪枝后的誤差小於剪枝前經度的上限,則說明剪枝后的效果與剪枝前的效果一致,此時要進行剪枝。
進行剪枝必須滿足的條件:
其中:
表示剪枝前子樹的誤差;
表示剪枝后節點的誤差;
兩者的計算公式如下:
令子樹誤差的經度滿足二項分布,根據二項分布的性質, ,
,其中
,N為子樹的數據量;同樣,葉子節點的誤差
。
上述公式中,0.5表示修正因子。由於子節點是父節點進行分裂的結果,從理論上講,子節點的分類效果總比父節點好,分類的誤差更小,如果單純通過比較子節點和父節點的誤差進行剪枝就完全沒有意義了,因此對節點的誤差計算方法進行修正。修正的方法是給每一個節點都加上誤差修正因子0.5,在計算誤差的時候,子節點由於加上了誤差修正因子,就無法保證總誤差低於父節點。
算例:
由於 ,所以應該進行剪枝。
(3)CCP—代價復雜度剪枝
代價復雜度選擇節點表面誤差率增益值最小的非葉子節點,刪除該非葉子節點的左右子節點,若有多個非葉子節點的表面誤差率增益值相同小,則選擇非葉子節點中子節點數最多的非葉子節點進行剪枝。
可描述如下:
令決策樹的非葉子節點為。
a) 計算所有非葉子節點的表面誤差率增益值
b)選擇表面誤差率增益值最小的非葉子節點(若多個非葉子節點具有相同小的表面誤差率增益值,選擇節點數最多的非葉子節點)。
c)對選中的非葉子節點進行剪枝
表面誤差率增益值的計算公式:
其中:
表示葉子節點的誤差代價,
,
為節點的錯誤率,
為節點數據量的占比;
表示子樹的誤差代價,
,
為子節點i的錯誤率,
表示節點i的數據節點占比;
表示子樹節點個數。
算例:
下圖是決策樹A的其中一顆子樹,決策樹的總數據量為40。
該子樹的表面誤差率增益值可以計算如下:
求出該子樹的表面錯誤覆蓋率為 1/40,只要求出其他子樹的表面誤差率增益值就可以對決策樹進行剪枝.