Decision Tree 是一種基於條件分支的監督式學習模型,可用於分類與回歸任務。它透過一連串的「是/否」判斷,將資料不斷切分成更純淨的子集,最終形成一個由節點 (Nodes) 與邊 (Edges) 組成的樹狀結構。直覺上,你可以將它想成一連串的決策問句: 「乘客的性別是女性嗎?」 → 是 → 「年齡是否小於 12 歲?」 → 是 → 存活機率高。其最大特色是 可解釋性高,每個決策規則都能清楚對應到特徵與閾值,便於與非技術背景的利害關係人溝通。
決策樹 (Decision Tree) 是一種監督式學習演算法,可用於分類與回歸任務。模型的結構類似一棵樹,由節點 (Node) 與分支 (Branch) 組成
建構過程是「貪婪式遞迴分割 (Greedy Recursive Splitting)」,根據資訊增益 (Information Gain) 最大或吉尼不純度 (Gini Impurity) 最小的原則進行
決策樹使用「貪婪演算法」建構模型,並無使用梯度下降類優化器,主要特徵:
優點 | 缺點 | |
---|---|---|
模型結構直觀,可視覺化 | 易過擬合,尤其是深樹 | |
對特徵縮放不敏感 (不需標準化) | 對資料擾動敏感 (小變化可能改變樹結構) | |
可處理數值與類別型特徵 | 單棵樹表現有限 (通常需配合集成方法如 Random Forest, XGBoost) | |
支援特徵重要性評估 | 分裂偏向多取值的特徵 (需調整) |
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
# 讀取資料
data = pd.read_csv('titanic.csv')
# 特徵與標籤
features = ["Pclass", "Sex", "Age", "Fare"]
data = data.dropna(subset=["Age"]) # 簡單處理缺失值
X = pd.get_dummies(data[features]) # One-Hot Encoding
y = data["Survived"]
# 訓練 / 測試切分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 建立模型
clf = DecisionTreeClassifier(
criterion='gini',
max_depth=4,
random_state=42
)
clf.fit(X_train, y_train)
# 評估
print("Accuracy: ", clf.score(X_test, y_test))
# 視覺化
plt.figure(figsize=(15,8))
plot_tree(clf, feature_names=X.columns, class_names=['Not Survived', 'Survived'], filled=True)
plt.show()
Test Accuracy: 0.8268
precision recall f1-score support
0 0.8319 0.9000 0.8646 110
1 0.8167 0.7101 0.7597 69
accuracy 0.8268 179
macro avg 0.8243 0.8051 0.8122 179
weighted avg 0.8260 0.8268 0.8242 179
Top Feature Importances:
feature importance
adult_male_True 0.588332
class_Third 0.185393
fare 0.156906
age 0.045641
class_Second 0.014194
parch 0.009535
embarked_S 0.000000
alone_False 0.000000
adult_male_False 0.000000
who_woman 0.000000
who_man 0.000000
who_child 0.000000
embarked_C 0.000000
embarked_Q 0.000000
class_First 0.000000
我會先驗證的 6 件事:
Decision Tree 的最大優勢在於 可解釋性與直觀性,適合需要明確規則與透明決策邏輯的情境。然而,單棵決策樹在泛化能力上有限,常與集成方法 (Random Forest、Gradient Boosting) 結合以提升表現。在實務中,若你需要快速建立一個能與商業部門對話的模型,Decision Tree 是一個高性價比的選擇。