1?? 什么是決策樹?
決策樹(Decision Tree)是一種常見的監督學習方法,可用于分類和回歸。
其基本思想是:
通過特征條件的逐層劃分,將數據集分割成越來越“純凈”的子集,直到子集中的樣本幾乎屬于同一類別。
最終輸出是一個樹形結構,每個葉節點對應一個類別或預測值。
2?? 決策樹的構建思想
從根節點開始,選擇一個最佳特征來劃分數據集
對劃分后的子集遞歸構建子樹
當滿足停止條件時(子集純凈、特征用盡或達到深度限制)終止
3?? 特征選擇指標
決策樹核心在于:如何選擇最優的劃分特征?
(1) 信息增益(ID3算法)
熵(Entropy)定義:
?
其中 ? 是類別
在數據集
中的概率。?
信息增益定義:?
?
:特征
:在特征
下的數據子集
優點:選擇信息增益最大的特征,降低數據的不確定性。
(2) 信息增益率(C4.5算法)
信息增益率定義:
?
其中?
?
(3) 基尼指數(CART算法)
基尼指數定義:
?
某特征 的基尼指數:?
?
4?? 決策樹生成與剪枝
4.1 生成過程
遞歸劃分數據集
根據指標(信息增益/基尼指數)選擇最優特征
當樣本數量小于閾值或特征用盡,生成葉節點
4.2 剪枝(Pruning)
防止過擬合,主要有兩類:
預剪枝(Pre-Pruning):
在生成樹時提前終止劃分,例如:最大深度限制
節點最小樣本數限制
信息增益小于閾值
后剪枝(Post-Pruning):
完整生成樹后,再自底向上刪除不必要的分支。
5?? 決策樹的完整數學表達
分類決策函數為:
?
回歸任務可輸出均值:?
?
6?? Python實現(Sklearn)?
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_text# 加載數據
X, y = load_iris(return_X_y=True)# 構建決策樹
clf = DecisionTreeClassifier(criterion="gini", max_depth=3, random_state=0)
clf.fit(X, y)# 輸出結構
print(export_text(clf, feature_names=["sepal_length","sepal_width","petal_length","petal_width"]))
如果需要可視化:?
from sklearn import tree
import matplotlib.pyplot as pltplt.figure(figsize=(12,8))
tree.plot_tree(clf, filled=True, feature_names=["sepal_length","sepal_width","petal_length","petal_width"])
plt.show()
7?? 優缺點總結
? 優點
可解釋性強,輸出清晰的規則
不需要大量特征工程(無需歸一化)
能同時處理數值型和離散型特征
? 缺點
容易過擬合,需要剪枝
對數據微小波動敏感
貪心選擇特征,可能不是全局最優
8?? 應用場景
風控評分卡(可解釋性需求高)
醫學診斷、臨床輔助
客戶細分、市場營銷
與集成學習(RandomForest、XGBoost)結合
📚 總結
ID3 用信息增益,C4.5 用信息增益率,CART 用基尼指數
剪枝是防止過擬合的關鍵步驟
決策樹是集成學習方法的核心基學習器