決策樹之剪枝
在決策樹的學習過程中,為了盡可能正確分類訓練樣本,節點劃分過程將不斷重復,有時會造成決策樹分支過多,這是可能因為訓練樣本學的“太好了”,以至於把訓練集自身的一些特點當作所有數據都具有的一般性質而導致過擬合,而剪枝是決策樹學習算法應對“過擬合”的主要手段,所以我們可以通過主動去掉一些分支來降低過擬合的風險,這就是決策樹剪枝。決策樹剪枝的基本策略有“預剪枝”和“後剪枝”,預剪枝是指在決策樹生成過程中,對每個節點在劃分前先進行估計,若當前節點的劃分不能帶來決策樹泛化能力的提升,則停止劃分並將當前節點標記為葉節點,後剪枝則是先從訓練集生成一棵完整的決策樹,然後自底向上地對非葉節點進行考察,若將該節點對應的子樹替換為葉節點能帶來決策樹泛化性能的提升,則將該子樹替換為葉節點。
我們采用下表所示的數據集,編號為{1,2,3,6,7,10,14,15,16,17}的樣例為訓練集,編號為{4,5,8,9,11,12,13}的樣例組成驗證集。
表一:基於西瓜數據集的訓練集和驗證集
編號 | 色澤 | 根蒂 | 敲聲 | 紋理 | 臍部 | 觸感 | 好瓜 |
1 | 青綠 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 烏黑 | 蜷縮 | 沈悶 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 烏黑 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
6 | 青綠 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 是 |
7 | 烏黑 | 稍蜷 | 濁響 | 稍糊 | 稍凹 | 軟粘 | 是 |
10 | 青綠 | 硬挺 | 清脆 | 清晰 | 平坦 | 軟粘 | 否 |
14 | 淺白 | 稍蜷 | 沈悶 | 稍糊 | 凹陷 | 硬滑 | 否 |
15 |
烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 否 |
16 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 硬滑 | 否 |
17 | 青綠 | 蜷縮 | 沈悶 | 稍糊 | 稍凹 | 硬滑 | 否 |
4 | 青綠 | 蜷縮 | 沈悶 | 清晰 | 凹陷 | 硬滑 | 是 |
5 | 淺白 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
8 | 烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 硬滑 | 是 |
9 | 烏黑 | 稍蜷 | 沈悶 | 稍糊 | 稍凹 | 硬滑 | 否 |
11 | 淺白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
12 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 軟粘 | 否 |
13 | 青綠 | 稍蜷 | 濁響 | 稍糊 | 凹陷 | 硬滑 | 否 |
我們采用信息增益準則來進行劃分屬性選擇,基於表一中的訓練集則可生成如下圖所示的一棵未剪枝決策樹,為了便於討論,我們對圖中的部分節點做了編號。
圖一:未剪枝決策樹
預剪枝
基於信息增益準則,我們會選取屬性“臍部”來對訓練集進行劃分,並產生三個分支,如下圖所示,然而是否應該進行這個劃分,預剪枝需要對劃分前後的泛化能力進行評估,在劃分之前,所有樣例集中在根節點,若不進行劃分,該節點被標記為葉節點,其類別標記為訓練樣例數最多的類別,假設我們將這個葉節點標記為好瓜,用驗證集對這個單節點決策樹進行評估,則{4,5,8}的樣例被分類正確,另外4個樣例分類錯誤,於是,驗證集精度為3/7*100%=42.9%
圖二:預剪枝決策樹
在用屬性“臍部”劃分之後,上圖中節點2,3,4分別包含編號為{1,2,3,14},{6,7,15,17},{10,16}的訓練樣例,因此這三個節點分別被標記為葉節點“好瓜”,“好瓜”,“壞瓜”,此時,驗證集編號為{4,5,8,11,12}的樣例被分類正確,驗證集精度為5/7*100%=71.4%>42.9%,於是,用“臍部”進行劃分得以確定,然後,決策樹算法應該對節點2進行劃分,基於信息增益準則將挑選出劃分屬性“色澤”,然而在使用“色澤”劃分後,編號為{5}的驗證集樣本分類結果會由正確轉為錯誤,使得驗證集精度下降為57.1%,於是預剪枝策略將禁止節點2被劃分,對節點3,最優劃分屬性為“根蒂”,劃分後驗證集精度仍為71.4%,這個劃分不能提升驗證集精度,於是預剪枝策略禁止節點3被劃分,對於節點4,其所含訓練樣例已屬於同一類,不再進行劃分,於是,基於預剪枝策略所生成的決策樹如圖二所示,其驗證集精度為71.4%,這是一顆僅有一層劃分的決策樹,亦稱“決策樹樁”。
由對比可知,預剪枝使得決策樹的很多分支都沒有展開,這不僅降低了過擬合的風險,還顯著減少了決策樹的訓練時間開銷和測試時間開銷,但另一方便,有些分支的當前劃分雖不能提升泛化性能,甚至可能導致泛化性能暫時下降,但是在其基礎上進行的後續劃分卻有可能導致性能顯著提高,預剪枝基於“貪心”本質禁止這些分支展開,給預剪枝決策樹帶來了欠擬合的風險。
後剪枝
後剪枝先從訓練集生成一棵完整決策樹,如圖一所示的未剪枝決策樹,該決策樹的驗證集精度為42.9%,後剪枝首先考察圖一中的節點6,若將其領銜的分支剪除,則相當於把6替換為葉節點,替換後的葉節點包含編號為{7,15}的訓練樣本,於是該葉節點的類別標記為“好瓜”,次數決策樹的驗證集精度提升到57.1%,於是後剪枝策略決定剪枝,然後考察節點5,若將其替換為葉節點,則替換後的葉節點包含編號為{6,7,15}的訓練樣例,葉節點類別標記為“好瓜”,此時決策樹驗證集精度仍為57.1%,於是,可以不進行剪枝,對節點2,若將其替換為葉節點,則替換後的葉節點包含編號為{1,2,3,14}的訓練樣例,葉節點標記為“好瓜”,此時決策樹的驗證集精度提升到71.4%,於是後剪枝策略決定剪枝,對節點3和節點1,若將其替換,精度分別提升為71.4%和42.9%,均未得到提高,於是都被保留,最終,基於後剪枝策略我們最終得到了如下圖所示的後剪枝決策樹,其驗證集精度為71.4%。
圖三:後剪枝決策樹
由對比可知,後剪枝決策樹通常比預剪枝決策樹保留了更多的分支,一般情形下,後剪枝決策樹的欠擬合風險很小,泛化性能往往優於預剪枝決策樹,但後剪枝過程是在生成完全決策樹之後進行的,並且要自底向上地對樹中的所有非葉節點進行逐一考察,因此其訓練時間開銷比未剪枝決策樹和預剪枝決策樹都要大得多。
決策樹之剪枝