iT邦幫忙

0

Day 19|非線性分類利器:決策樹(Decision Tree)分類實戰與可解釋樹狀圖視覺化

  • 分享至 

  • xImage
  •  

第十九天,我們要跨入具備非線性切分能力且直覺好懂的機器學習模型——決策樹(Decision Tree)。先前介紹的邏輯斯迴歸是在空間中劃出一條直線或平面,但現實中的決策邏輯往往是一連串的規則判斷(例如:「若體溫 > 37.5°C 且 咳嗽,則判定為感冒」)。決策樹最大的優勢在於強大的可解釋性(White-box Model),演算法會自動找出資訊增益最大的特徵進行二元切分。今天我們建立純 Python 腳本 day19_decision_tree.py,掌握決策樹分類器建模、防止過擬合的剪枝參數設定,並使用 Scikit-Learn 內建工具將整棵樹視覺化輸出。

第一部分
新建 day19_decision_tree.py。使用鳶尾花(Iris)經典資料集,選取花瓣長度與花瓣寬度兩大特徵,切分訓練集與測試集,並建立決策樹分類器:
https://ithelp.ithome.com.tw/upload/images/20261018/20184472PVhA1pDmt7.png

第二部分
初始化 DecisionTreeClassifier。為了防止決策樹長得過深而導致「過擬合(Overfitting)」,實務上必須進行預剪枝(Pre-pruning),例如限制最大深度 max_depth=3,接著進行模型訓練並計算測試集準確率:
https://ithelp.ithome.com.tw/upload/images/20261018/20184472310KD2F3s5.png

第三部分
決策樹最迷人的地方在於其決策流程完全透明。我們可以使用 Scikit-Learn 的 plot_tree(),把這棵樹的節點切分門檻、吉尼係數(Gini Impurity)與樣本人數畫出來,匯出成結構樹狀圖:
https://ithelp.ithome.com.tw/upload/images/20261018/20184472hPlLDUf3IZ.png

第四部分
在終端機輸入 python day19_decision_tree.py 執行驗證,確認模型準確率、特徵重要性皆順利輸出,且圖片 day19_decision_tree.png 順利產出。按 Ctrl + S 儲存後推送到 GitHub 進行版本控制:
https://ithelp.ithome.com.tw/upload/images/20261018/20184472aMtMyZAl5I.png

今日心得/遇到的問題
今天體驗了決策樹強大的白箱可解釋特性。透過 plot_tree 產出的圖,不需要懂複雜數學也能清楚看到「花瓣長度 <= 2.45cm 的直接分為 setosa」,非常符合人類的邏輯推演。另外,決策樹非常容易因為長得太深而將雜訊當成規律背下來(過擬合),因此在宣告模型時設定 max_depth 或 min_samples_leaf 等剪枝條件是維持模型泛化能力的關鍵調參細節。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言