決策樹(decision tree)(二)——剪枝

決策樹(decision tree)(二)——剪枝

**注:本博客爲周志華《機器學習》讀書筆記,雖然有一些自己的理解,但是其中仍然有大量文字摘自周老師的《機器學習》書。
決策樹系列博客:

  1. 決策樹(一)——構造決策樹
  2. 決策樹(二)——剪枝
  3. 決策樹(decision tree)(三)——連續值處理
  4. 決策樹(四)缺失值處理

前面在決策樹(decision tree)(一)中介紹了幾種對結點劃分的方法(信息增益、信息增益率、基尼指數),在這篇博客裏主要介紹剪枝,即;

  1. 預剪枝(pre-pruning)
  2. 後剪枝(post-pruning)

首先剪枝(pruning)的目的是爲了避免決策樹模型的過擬合。因爲決策樹算法在學習的過程中爲了儘可能的正確的分類訓練樣本,不停地對結點進行劃分,因此這會導致整棵樹的分支過多,也就導致了過擬合。決策樹的剪枝策略最基本的有兩種:預剪枝(pre-pruning)和後剪枝(post-pruning):

  • 預剪枝(pre-pruning)預剪枝就是在構造決策樹的過程中,先對每個結點在劃分前進行估計,若果當前結點的劃分不能帶來決策樹模型泛華性能的提升,則不對當前結點進行劃分並且將當前結點標記爲葉結點。
  • 後剪枝(post-pruning):後剪枝就是先把整顆決策樹構造完畢,然後自底向上的對非葉結點進行考察,若將該結點對應的子樹換爲葉結點能夠帶來泛華性能的提升,則把該子樹替換爲葉結點。

一、預剪枝(pre-pruning)
        關於預剪枝(pre-pruning)的基本概念,在前面已經介紹過了,下面就直接舉個例子來看看預剪枝(pre-pruning)是怎樣操作的。數據集爲(圖片來自西瓜書):

這個數據集根據信息增益可以構造出一顆未剪枝的決策樹(圖片來自西瓜書):

下面來看下具體的構造過程:
前面博客(決策樹(一))講過用信息增益怎麼構造決策樹,這邊還是用信息增益構造決策樹,先來計算出所有特徵的信息增益值:

因爲色澤臍部的信息增益值最大,所以從這兩個中隨機挑選一個,這裏選擇臍部來對數據集進行劃分,這會產生三個分支,如下圖所示:

但是因爲是預剪枝,所以要判斷是否應該進行這個劃分,判斷的標準就是看劃分前後的泛華性能是否有提升,也就是如果劃分後泛華性能有提升,則劃分;否則,不劃分。 下面來看看是否要用臍部進行劃分,劃分前:所有樣本都在根節點,把該結點標記爲葉結點,其類別標記爲訓練集中樣本數量最多的類別,因此標記爲好瓜,然後用驗證集對其性能評估,可以看出樣本{4,5,8}被正確分類,其他被錯誤分類,因此精度爲43.9%。劃分後: 劃分後的的決策樹爲:

則驗證集在這顆決策樹上的精度爲:5/7 = 71.4% > 42.9%。因此,用 臍部 進行劃分。
        接下來,決策樹算法對結點 (2) 進行劃分,再次使用信息增益挑選出值最大的那個特徵,這裏我就不算了,計算方法和上面類似,信息增益值最大的那個特徵是“色澤”,則使用“色澤”劃分後決策樹爲:

但到底該不該劃分這個結點,還是要用驗證集進行計算,可以看到劃分後,精度爲:4/7=0.571<0.714,因此,預剪枝策略將禁止劃分結點 (2) 。對於結點 (3) 最優的屬性爲“根蒂”,劃分後驗證集精度仍爲71.4%,因此這個劃分不能提升驗證集精度,所以預剪枝將禁止結點 (3) 劃分。對於結點 (4) ,其所含訓練樣本已屬於同一類,所以不再進行劃分。
        所以基於預剪枝策略生成的最終的決策樹爲:

總結: 對比未剪枝的決策樹和經過預剪枝的決策樹可以看出:預剪枝使得決策樹的很多分支都沒有“展開”,這不僅降低了過擬合的風險,還顯著減少了決策樹的訓練時間開銷和測試時間開銷。但是,另一方面,因爲預剪枝是基於“貪心”的,所以,雖然當前劃分不能提升泛華性能,但是基於該劃分的後續劃分卻有可能導致性能提升,因此預剪枝決策樹有可能帶來欠擬合的風險。

二、後剪枝(post-pruning)
        後剪枝就是先構造一顆完整的決策樹,然後自底向上的對非葉結點進行考察,若將該結點對應的子樹換爲葉結點能夠帶來泛華性能的提升,則把該子樹替換爲葉結點。前面已經說過了,使用前面給出的訓練集會生成一顆(未剪枝)決策樹:

        後剪枝算法首先考察上圖中的結點 (6),若將以其爲根節點的子樹刪除,即相當於把結點 (6) 替換爲葉結點,替換後的葉結點包括編號爲{7,15}的訓練樣本,因此把該葉結點標記爲“好瓜”(因爲這裏正負樣本數量相等,所以隨便標記一個類別),因此此時的決策樹在驗證集上的精度爲57.1%(爲剪枝的決策樹爲42.9%),所以後剪枝策略決定剪枝,剪枝後的決策樹如下圖所示:

        接着考察結點 5,同樣的操作,把以其爲根節點的子樹替換爲葉結點,替換後的葉結點包含編號爲{6,7,15}的訓練樣本,根據“多數原則”把該葉結點標記爲“好瓜”,測試的決策樹精度認仍爲57.1%,所以不進行剪枝。
        考察結點 2 ,和上述操作一樣,不多說了,葉結點包含編號爲{1,2,3,14}的訓練樣本,標記爲“好瓜”,此時決策樹在驗證集上的精度爲71.4%,因此,後剪枝策略決定剪枝。剪枝後的決策樹爲:

        接着考察結點 3 ,同樣的操作,剪枝後的決策樹在驗證集上的精度爲71.4%,沒有提升,因此不剪枝;對於結點 1 ,剪枝後的決策樹的精度爲42.9%,精度下降,因此也不剪枝。
        因此,基於後剪枝策略生成的最終的決策樹如上圖所示,其在驗證集上的精度爲71.4%。

總結:對比預剪枝後剪枝,能夠發現,後剪枝決策樹通常比預剪枝決策樹保留了更多的分支,一般情形下,後剪枝決策樹的欠擬合風險小,泛華性能往往也要優於預剪枝決策樹。但後剪枝過程是在構建完全決策樹之後進行的,並且要自底向上的對樹中的所有非葉結點進行逐一考察,因此其訓練時間開銷要比未剪枝決策樹和預剪枝決策樹都大得多。

參考文獻
[1]: 周志華 《機器學習》





發佈了100 篇原創文章 · 獲贊 465 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章