决策树算法

文章目录

    • 基本概念与原理
      • 决策树定义
      • 两种理解视角
    • 模型构建三要素
      • 1. 特征选择
        • (1) 信息增益 (ID3算法)
        • (2) 信息增益比 (C4.5算法)
        • (3) 基尼指数 (CART算法)
      • 2. 决策树生成
      • 3. 决策树剪枝
        • (1) 预剪枝 (Pre-pruning)
        • (2) 后剪枝 (Post-pruning)
    • 决策树算法对比
      • CART回归树生成
    • Scikit-learn 实现
      • 分类树
      • CART 决策树 - 回归树
    • 决策树优劣势总结

基本概念与原理

决策树定义

  • 树形结构:由结点和有向边组成的分类模型
  • 结点类型
    • 内部结点:表示特征属性(如天气、温度)
    • 叶结点:表示分类结果(如是否打高尔夫)
  • 决策过程:从根结点开始,根据特征取值递归划分数据

两种理解视角

  1. 规则视角

    • 决策树是一组互斥且完备的if-then规则
    • 每条路径对应一条规则:根结点→叶结点 = 条件→结论
    • 示例规则:IF 天气=晴 AND 温度=冷 AND 有风=否 AND 湿度=正常 THEN 打高尔夫=是
  2. 概率视角

    • 特征空间划分为互斥区域 R 1 , R 2 , . . . , R m R_1, R_2, ..., R_m R1,R2,...,Rm
    • 每个区域定义条件概率分布 P ( Y ∣ X ∈ R i ) P(Y|X \in R_i) P(YXRi)
    • 决策树表示的条件概率分布: P ( Y ∣ X ) = ∑ i = 1 m P ( Y ∣ X ∈ R i ) I ( X ∈ R i ) P(Y|X) = \sum_{i=1}^m P(Y|X \in R_i)I(X \in R_i) P(YX)=i=1mP(YXRi)I(XRi)

模型构建三要素

1. 特征选择

选择最优划分特征的标准:

(1) 信息增益 (ID3算法)
  • 经验熵(数据集 D D D的不确定性):
    H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ H(D) = -\sum_{k=1}^{K} \frac{|C_k|}{|D|} \log_2 \frac{|C_k|}{|D|} H(D)=k=1KDCklog2DCk
  • 条件熵(特征 A A A给定条件下 D D D的不确定性):
    H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) H(D|A) = \sum_{i=1}^{n} \frac{|D_i|}{|D|} H(D_i) H(DA)=i=1nDDiH(Di)
  • 信息增益
    g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A) = H(D) - H(D|A) g(D,A)=H(D)H(DA)
    值越大表示特征 A A A的区分能力越强

高尔夫数据集示例(天气特征)

  • 总样本数 ∣ D ∣ = 14 |D|=14 D=14,正例(是) 9 9 9,反例(否) 5 5 5
  • H ( D ) = − ( 9 14 log ⁡ 2 9 14 + 5 14 log ⁡ 2 5 14 ) = 0.940 H(D) = -\left(\frac{9}{14}\log_2\frac{9}{14} + \frac{5}{14}\log_2\frac{5}{14}\right) = 0.940 H(D)=(149log2149+145log2145)=0.940
  • 天气取值:晴(5)、阴(4)、雨(5)
    • 晴:3是/2否 → H ( D 晴 ) = 0.971 H(D_{晴}) = 0.971 H(D)=0.971
    • 阴:4是/0否 → H ( D 阴 ) = 0 H(D_{阴}) = 0 H(D)=0
    • 雨:2是/3否 → H ( D 雨 ) = 0.971 H(D_{雨}) = 0.971 H(D)=0.971
  • H ( D ∣ 天气 ) = 5 14 × 0.971 + 4 14 × 0 + 5 14 × 0.971 = 0.694 H(D|\text{天气}) = \frac{5}{14} \times 0.971 + \frac{4}{14} \times 0 + \frac{5}{14} \times 0.971 = 0.694 H(D天气)=145×0.971+144×0+145×0.971=0.694
  • g ( D , 天气 ) = 0.940 − 0.694 = 0.246 g(D,\text{天气}) = 0.940 - 0.694 = 0.246 g(D,天气)=0.9400.694=0.246
(2) 信息增益比 (C4.5算法)
  • 解决信息增益偏向多值特征的问题:
    g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A) = \frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
    其中 H A ( D ) H_A(D) HA(D) 是特征 A A A的熵:
    H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ log ⁡ 2 ∣ D i ∣ ∣ D ∣ H_A(D) = -\sum_{i=1}^{n} \frac{|D_i|}{|D|} \log_2 \frac{|D_i|}{|D|} HA(D)=i=1nDDilog2DDi
(3) 基尼指数 (CART算法)
  • 基尼值(数据集 D D D的不纯度):
    Gini ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 \text{Gini}(D) = 1 - \sum_{k=1}^{K} \left( \frac{|C_k|}{|D|} \right)^2 Gini(D)=1k=1K(DCk)2
  • 基尼指数(特征 A A A的基尼值):
    Gini_index ( D , A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ Gini ( D i ) \text{Gini\_index}(D,A) = \sum_{i=1}^{n} \frac{|D_i|}{|D|} \text{Gini}(D_i) Gini_index(D,A)=i=1nDDiGini(Di)
    值越小表示特征 A A A的区分能力越强

高尔夫数据集示例(温度特征)

  • Gini ( D ) = 1 − [ ( 9 14 ) 2 + ( 5 14 ) 2 ] = 0.459 \text{Gini}(D) = 1 - \left[ \left(\frac{9}{14}\right)^2 + \left(\frac{5}{14}\right)^2 \right] = 0.459 Gini(D)=1[(149)2+(145)2]=0.459
  • 温度取值:热(4)、温(6)、冷(4)
    • 热:2是/2否 → Gini ( D 热 ) = 1 − ( 0.5 2 + 0.5 2 ) = 0.5 \text{Gini}(D_{热}) = 1 - (0.5^2 + 0.5^2) = 0.5 Gini(D)=1(0.52+0.52)=0.5
    • 温:4是/2否 → Gini ( D 温 ) = 1 − ( 4 6 2 + 2 6 2 ) = 0.444 \text{Gini}(D_{温}) = 1 - (\frac{4}{6}^2 + \frac{2}{6}^2) = 0.444 Gini(D)=1(642+622)=0.444
    • 冷:3是/1否 → Gini ( D 冷 ) = 1 − ( 3 4 2 + 1 4 2 ) = 0.375 \text{Gini}(D_{冷}) = 1 - (\frac{3}{4}^2 + \frac{1}{4}^2) = 0.375 Gini(D)=1(432+412)=0.375
  • Gini_index ( D , 温度 ) = 4 14 × 0.5 + 6 14 × 0.444 + 4 14 × 0.375 = 0.439 \text{Gini\_index}(D,\text{温度}) = \frac{4}{14} \times 0.5 + \frac{6}{14} \times 0.444 + \frac{4}{14} \times 0.375 = 0.439 Gini_index(D,温度)=144×0.5+146×0.444+144×0.375=0.439

2. 决策树生成

  • 递归划分:从根节点开始,选择最优特征划分数据集
  • 停止条件
    1. 当前结点样本全属同一类别
    2. 无剩余特征可用
    3. 结点样本数低于阈值

3. 决策树剪枝

防止过拟合的核心技术:

(1) 预剪枝 (Pre-pruning)
  • 策略:在分裂前评估泛化能力,停止增长
  • 评估方法:使用验证集计算划分前后的准确率
  • 优点:计算高效,适合大规模数据
  • 缺点:欠拟合风险,可能过早停止生长
(2) 后剪枝 (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:叶结点数量(模型复杂度)
    • α \alpha α:权衡参数
  • 剪枝原则:选择使损失函数最小的子树
  • 优点:泛化能力强,保留重要分支
  • 缺点:计算开销大

决策树算法对比

算法 特征选择 任务类型 树结构 特点
ID3 信息增益 分类 多叉树 偏向选择取值多的特征
C4.5 信息增益比 分类 多叉树 解决ID3偏置问题,处理连续值
CART 基尼指数 分类 二叉树 支持分类和回归,效率高
CART 平方误差 回归 二叉树 最小化 ∑ ( y i − y ^ i ) 2 \sum(y_i - \hat{y}_i)^2 (yiy^i)2

CART回归树生成


Scikit-learn 实现

分类树

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# 创建模型(使用基尼指数)
clf = DecisionTreeClassifier(
    criterion='gini',       # 分裂标准
    max_depth=3,            # 树的最大深度
    min_samples_split=5,    # 内部节点再划分所需最小样本数
    min_samples_leaf=2,     # 叶节点最小样本数
    random_state=42
)

# 训练与评估
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))

# 可视化决策树
import matplotlib.pyplot as plt
from sklearn import tree
plt.figure(figsize=(12,8))
tree.plot_tree(clf, feature_names=iris.feature_names, 
               class_names=iris.target_names, filled=True)
plt.show()

CART 决策树 - 回归树

  • 假设训练输入X和输出Y,给定训练数据集D={(x1,y1),(x2,y2),⋯,(x**N,y**N)},CART 回归树的构建方法如下。
  • 回归树对应特征空间的一个划分以及在该划分单元上的输出值。假设特征空间有M个划分单元R1,R2,⋯,R**M,且每个划分单元都有一个输出权重c**m,那么回归树模型可以表示为:
    f(x)=∑m=1Mc**mI(xR**m​)
  • 回归树模型训练的目的是最小化平方损失∑x**iR**m(y**if(x**i))2,以期求得最佳输出权重c^m
    c^m​=average(y**i​∣x**i​∈R**m​)
  • CART 分类树通过计算基尼指数确定最佳特征和最优切分点,那么回归树如何确定特征最优切分点?假设随机选取第j个特征x(j)及其对应的某个取值s,将其作为划分特征和切分点,同时定义两个区域:
    R1​(j,s)={xx(j)≤s}
    R2​(j,s)={xx(j)>s}
    minj**s​[minc1​​∑x**i​∈R1​(j,s)​(y**i​−c1​)2+minc2​​∑x**i​∈R2​(j,s)​(y**i​−c2​)2]
  • 求解上式即可得到输入特征j和最优切分点s。按照上述平方误差最小准则可以求得全局最优切分特征和取值,并据此将特征空间划分为两个子区域,对每个子区域重复前述划分过程,直至满足停止条件,即可生成一棵回归树。

决策树优劣势总结

优势 劣势
直观易解释(白盒模型) 容易过拟合(需剪枝)
无需特征缩放 对数据变化敏感(不稳定)
处理混合类型特征 忽略特征间相关性
可处理缺失值 可能创建偏斜树(不平衡数据)
特征选择自动完成 最优树是NP完全问题(启发式算法)

实际应用建议:使用集成方法(如随机森林、GBDT)提升决策树性能

你可能感兴趣的:(机器学习,算法,决策树,机器学习)