機器學習入門核心算法:邏輯回歸(Decision Tree)
- 一、算法邏輯
- 1.1 基本概念
- 1.2 算法流程
- 二、算法原理與數學推導
- 2.1 特征選擇指標
- 信息熵(ID3算法)
- 信息增益(Information Gain)
- 信息增益率(C4.5算法)
- 基尼系數(CART算法)
- 2.2 決策樹生成算法
- 2.3 剪枝處理
- 預剪枝(Pre-pruning)
- 后剪枝(Post-pruning)
- 三、模型評估
- 3.1 評估指標
- 3.2 學習曲線分析
- 四、應用案例
- 4.1 鳶尾花分類
- 4.2 金融風控評分卡
- 五、經典面試題
- 問題1:ID3、C4.5、CART的區別?
- 問題2:如何處理連續特征?
- 問題3:決策樹的優缺點?
- 六、高級優化技術
- 6.1 多變量決策樹
- 6.2 增量學習
- 6.3 異構決策樹
- 七、最佳實踐指南
- 7.1 參數調優建議
- 7.2 特征處理技巧
- 總結與展望
一、算法邏輯
1.1 基本概念
決策樹是一種樹形結構監督學習算法,通過遞歸地將特征空間劃分為互不重疊的區域來完成分類或回歸任務。核心組成元素:
- 根節點:包含全體數據的起始節點
- 內部節點:表示特征判斷條件的分支節點
- 葉節點:存放最終決策結果的終端節點
關鍵特點:
- 天然支持可解釋性(白盒模型)
- 可處理數值型和類別型數據
- 通過樹深度控制模型復雜度
1.2 算法流程
構建決策樹的遞歸過程:
- 選擇當前最優劃分特征
- 根據特征取值分割數據集
- 對每個子集重復上述過程直到:
- 節點樣本純度達到閾值
- 達到最大樹深度
- 樣本數量小于分裂閾值
決策過程可視化:
是否年齡>30?
├── 是 → 是否有房產?
│ ├── 是 → 批準貸款
│ └── 否 → 拒絕貸款
└── 否 → 收入>50k?├── 是 → 批準貸款└── 否 → 拒絕貸款
二、算法原理與數學推導
2.1 特征選擇指標
信息熵(ID3算法)
衡量數據集混亂程度:
E n t ( D ) = ? ∑ k = 1 K p k log ? 2 p k Ent(D) = -\sum_{k=1}^K p_k \log_2 p_k Ent(D)=?k=1∑K?pk?log2?pk?
其中 p k p_k pk?為第 k k k類樣本的比例
信息增益(Information Gain)
G a i n ( D , a ) = E n t ( D ) ? ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D, a) = Ent(D) - \sum_{v=1}^V \frac{|D^v|}{|D|} Ent(D^v) Gain(D,a)=Ent(D)?v=1∑V?∣D∣∣Dv∣?Ent(Dv)
缺點:偏向選擇取值多的特征
信息增益率(C4.5算法)
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_ratio(D, a) = \frac{Gain(D, a)}{IV(a)} Gain_ratio(D,a)=IV(a)Gain(D,a)?
其中固有值:
I V ( a ) = ? ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ? 2 ∣ D v ∣ ∣ D ∣ IV(a) = -\sum_{v=1}^V \frac{|D^v|}{|D|} \log_2 \frac{|D^v|}{|D|} IV(a)=?v=1∑V?∣D∣∣Dv∣?log2?∣D∣∣Dv∣?
基尼系數(CART算法)
G i n i ( D ) = 1 ? ∑ k = 1 K p k 2 Gini(D) = 1 - \sum_{k=1}^K p_k^2 Gini(D)=1?k=1∑K?pk2?
基尼指數:
G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index(D, a) = \sum_{v=1}^V \frac{|D^v|}{|D|} Gini(D^v) Gini_index(D,a)=v=1∑V?∣D∣∣Dv∣?Gini(Dv)
2.2 決策樹生成算法
ID3算法偽代碼:
def create_tree(D, A):if D中樣本全屬于同一類別C:return 葉節點標記為Cif A = ? or D在所有特征上取值相同:return 葉節點標記為D中最多類選擇最優劃分特征a*生成分支節點:for a*的每個取值v:Dv = D中在a*上取值為v的子集if Dv為空:分支標記為D中最多類else:遞歸調用create_tree(Dv, A-{a*})return 分支節點
2.3 剪枝處理
預剪枝(Pre-pruning)
在樹生成過程中提前停止分裂:
- 設置最大深度
max_depth
- 設置節點最小樣本數
min_samples_split
- 設置信息增益閾值
min_impurity_decrease
后剪枝(Post-pruning)
生成完整樹后進行剪枝:
- 計算節點經驗熵:
C α ( T ) = C ( T ) + α ∣ T ∣ C_{\alpha}(T) = C(T) + \alpha |T| Cα?(T)=C(T)+α∣T∣- C ( T ) C(T) C(T):模型對訓練數據的預測誤差
- ∣ T ∣ |T| ∣T∣:葉節點個數
- 自底向上遞歸剪枝,選擇使 C α C_{\alpha} Cα?最小的子樹
三、模型評估
3.1 評估指標
任務類型 | 常用指標 | 計算公式 |
---|---|---|
分類 | 準確率、F1 Score、AUC | A c c u r a c y = T P + T N N Accuracy = \frac{TP+TN}{N} Accuracy=NTP+TN? |
回歸 | MSE、MAE、R2 | M S E = 1 n ∑ ( y i ? y ^ i ) 2 MSE = \frac{1}{n}\sum(y_i-\hat{y}_i)^2 MSE=n1?∑(yi??y^?i?)2 |
3.2 學習曲線分析
過擬合識別:
訓練集準確率:0.98
測試集準確率:0.72
→ 模型過擬合
解決方案:
- 增加剪枝強度
- 減少樹的最大深度
- 使用集成方法(如隨機森林)
四、應用案例
4.1 鳶尾花分類
數據集:150個樣本,4個特征(花萼長寬、花瓣長寬)
實現代碼:
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_irisiris = load_iris()
clf = DecisionTreeClassifier(max_depth=3)
clf.fit(iris.data, iris.target)# 可視化決策樹
from sklearn.tree import plot_tree
plot_tree(clf, feature_names=iris.feature_names)
模型效果:
- 準確率:0.96
- 關鍵分裂特征:花瓣長度(Petal length)
4.2 金融風控評分卡
業務場景:信用卡申請風險評估
特征工程:
- WOE編碼處理類別變量:
W O E i = ln ? ( B a d i / T o t a l B a d G o o d i / T o t a l G o o d ) WOE_i = \ln\left(\frac{Bad_i/TotalBad}{Good_i/TotalGood}\right) WOEi?=ln(Goodi?/TotalGoodBadi?/TotalBad?) - IV值篩選特征:
I V = ∑ ( B a d % ? G o o d % ) × W O E IV = \sum (Bad\% - Good\%) \times WOE IV=∑(Bad%?Good%)×WOE
模型輸出:
- 高風險客戶識別率:82%
- KS值:0.48
五、經典面試題
問題1:ID3、C4.5、CART的區別?
對比分析:
算法 | 分裂標準 | 任務類型 | 樹結構 | 缺失值處理 |
---|---|---|---|---|
ID3 | 信息增益 | 分類 | 多叉樹 | 不支持 |
C4.5 | 信息增益率 | 分類 | 多叉樹 | 支持 |
CART | 基尼系數/MSE | 分類/回歸 | 二叉樹 | 支持 |
問題2:如何處理連續特征?
解決方案:
- 排序所有特征值: a 1 , a 2 , . . . , a n a_1, a_2,...,a_n a1?,a2?,...,an?
- 計算候選劃分點:
T a = { a i + a i + 1 2 ∣ 1 ≤ i ≤ n ? 1 } T_a = \left\{\frac{a_i + a_{i+1}}{2} | 1 \leq i \leq n-1\right\} Ta?={2ai?+ai+1??∣1≤i≤n?1} - 選擇使指標最優的劃分點:
G a i n ( D , a , t ) = E n t ( D ) ? ∣ D l ∣ ∣ D ∣ E n t ( D l ) ? ∣ D r ∣ ∣ D ∣ E n t ( D r ) Gain(D, a, t) = Ent(D) - \frac{|D^l|}{|D|}Ent(D^l) - \frac{|D^r|}{|D|}Ent(D^r) Gain(D,a,t)=Ent(D)?∣D∣∣Dl∣?Ent(Dl)?∣D∣∣Dr∣?Ent(Dr)
問題3:決策樹的優缺點?
優勢分析:
- 直觀易懂,可視化效果好
- 無需數據歸一化
- 自動特征選擇
主要缺點:
- 容易過擬合
- 對樣本擾動敏感
- 忽略特征間相關性
六、高級優化技術
6.1 多變量決策樹
在非葉節點使用線性組合進行劃分:
∑ i = 1 d w i x i > t \sum_{i=1}^d w_i x_i > t i=1∑d?wi?xi?>t
優勢:能捕捉特征間交互作用
6.2 增量學習
支持在線更新決策樹:
- 保留歷史劃分結構
- 僅更新統計量
- 動態調整分裂點
6.3 異構決策樹
混合不同分裂標準:
- 上層使用信息增益率
- 下層使用基尼指數
七、最佳實踐指南
7.1 參數調優建議
參數 | 推薦值范圍 | 作用說明 |
---|---|---|
max_depth | 3-10 | 控制模型復雜度 |
min_samples_split | 10-100 | 防止過擬合 |
ccp_alpha | 0.01-0.1 | 后剪枝強度 |
7.2 特征處理技巧
- 類別變量:優先使用目標編碼而非One-Hot
- 缺失值:采用代理分裂(Surrogate Splits)
- 高基數特征:進行分箱處理
總結與展望
決策樹作為基礎機器學習算法,具有模型直觀、訓練高效的特點,在金融風控、醫療診斷等領域廣泛應用。隨著技術的發展,決策樹的改進方向包括:
- 與神經網絡結合(如深度森林)
- 自動化特征工程
- 分布式計算優化