【機器學習】決策樹剪枝優化及視覺化
前言
前面,我們介紹了分類決策樹的實現,以及用 sklearn
庫中的 DecisionTreeClassifier
和 DecisionTreeRegressor
類實現了分類決策樹和迴歸決策樹的一些案例。
- 具體可見:分類決策樹與迴歸決策樹
其中,我們也對決策樹的不同深度對模型的欠擬合和過擬合的影響進行了比較。
本篇原始碼可見:Github
一、欠擬合與過擬合
我們在構建決策樹的時候,為了儘可能正確分類訓練樣本,節點劃分過程不斷重複,有時候就會導致決策樹節點過多,使得模型對訓練樣本學得 “過好” ,以至於把訓練樣本的一些個別特徵資訊也當做一般性質,從而導致 “過擬合”;如果節點過少,就會導致訓練樣本的特徵資訊不能夠很好的學習到,從而導致 “欠擬合”。
圖中,藍色的線由於學習訓練樣本的太好,將噪聲資訊也學習到了,所以導致了過擬合;而黃色的線,決策樹深度只有一層,說明只劃分了一次,明顯出現了欠擬合。
對此,我們可以通過主動去掉一些分支來降低過擬合的風險,也就是 “剪枝處理”。
二、剪枝處理
決策樹的剪枝處理是決策樹演算法中最基本、最有用的一種優化方案,主要分為兩大類:
- 前置剪枝:
前置剪枝是指在決策樹生成過程中,對每個節點在劃分前先進行評估,若當前節點的劃分不能夠給模型帶來泛化效能的提升,則停止劃分並將當前節點標記為葉節點;
- 後置剪枝:
後置剪枝則是先從訓練樣本生成一棵完整的決策樹,然後 自底向上 地對非葉節點進行考察,若將該節點對應的子樹替換為葉節點能夠給模型帶來泛化效能的提升,則將該子樹替換為葉節點。
那麼我們如何檢視模型的泛化效能是否提升呢?
下面我們通過周志華的《機器學習》中的西瓜資料來詳細介紹剪枝過程。假設有如下西瓜資料:
- 訓練集
編號 | 色澤 | 根蒂 | 敲聲 | 紋理 | 臍部 | 觸感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | 青綠 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 烏黑 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 烏黑 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
6 | 青綠 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 是 |
7 | 烏黑 | 稍蜷 | 濁響 | 稍糊 | 稍凹 | 軟粘 | 是 |
– | – | – | – | – | – | – | – |
10 | 青綠 | 硬挺 | 清脆 | 清晰 | 平坦 | 軟粘 | 否 |
14 | 淺白 | 稍蜷 | 沉悶 | 稍糊 | 凹陷 | 硬滑 | 否 |
15 | 烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 否 |
16 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 硬滑 | 否 |
17 | 青綠 | 蜷縮 | 沉悶 | 稍糊 | 稍凹 | 硬滑 | 否 |
- 測試集
編號 | 色澤 | 根蒂 | 敲聲 | 紋理 | 臍部 | 觸感 | 好瓜 |
---|---|---|---|---|---|---|---|
4 | 青綠 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 | 是 |
5 | 淺白 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
8 | 烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 硬滑 | 是 |
– | – | – | – | – | – | – | – |
9 | 烏黑 | 稍蜷 | 沉悶 | 稍糊 | 稍凹 | 硬滑 | 否 |
11 | 淺白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
12 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 軟粘 | 否 |
13 | 青綠 | 稍蜷 | 濁響 | 稍糊 | 稍凹 | 硬滑 | 否 |
1、由測試集構建決策樹
-
計算原資訊熵:
-
計算第一個特徵色澤的資訊熵