CHAPTER 4
✓ 已完成
🌳

决策树

Decision Trees

学习目标

🎯
  • 理解决策树的基本原理和递归构建过程
  • 掌握信息增益、信息增益率、基尼指数等划分标准
  • 理解剪枝技术如何防止过拟合
  • 学会处理连续属性和缺失值
  • 认识决策树的优缺点及适用场景
4.1

基本流程

🌳

什么是决策树?

决策树是一种基于树结构的分类与回归方法。它通过一系列的判断规则, 将样本从根节点逐步划分到叶节点,每个叶节点对应一个类别或数值。

决策树的组成
🔴
根节点

包含所有训练样本,树的起点

🔵
内部节点

对应一个属性测试,将样本分流

🟢
叶节点

表示决策结果(类别标签)

🔄

递归构建过程

决策树的构建是一个自顶向下的递归过程, 基于分而治之策略:

1️⃣
选择最优划分属性

从当前节点的属性集合中,选择最能降低不确定性的属性

2️⃣
生成分支

根据选定属性的取值,将样本集划分到对应的子节点

3️⃣
递归处理子节点

对每个非空子集,递归执行上述步骤,直至满足停止条件

🛑

停止条件

当满足以下任一条件时,停止分裂并将当前节点标记为叶节点:

  • 当前节点的所有样本属于同一类别
  • 属性集为空,或所有样本在所有属性上取值相同
  • 当前节点包含的样本数少于预设阈值
  • 树的深度达到预设的最大值
4.2

划分选择

🎯

如何选择最优划分属性?

决策树学习的关键是如何选择最优划分属性。我们希望选择的属性能够最大程度地降低数据的不纯度, 使得划分后的子节点尽可能"纯"(即包含单一类别的样本)。

不同的决策树算法使用不同的划分标准:ID3 使用信息增益,C4.5 使用信息增益率,CART 使用基尼指数。

📊

信息熵 (Entropy)

信息熵是度量样本集合纯度的常用指标。假设样本集合 D 中第 k 类样本所占比例为 pk, 则 D 的信息熵定义为:

Ent(D) = -Σ pk log2 pk

Ent(D) = 0

完全纯,所有样本同类

Ent(D) = 1

最不纯,类别均匀分布

Ent(D) ↑

混乱度越高

🎮

信息熵计算器

调整不同类别的样本数量,观察信息熵如何变化。熵值越小,数据集越纯;熵值越大,数据集越混乱。

当前信息熵
1.000
中等 - 数据混合
0 (完全纯)1.00 (最混乱)
Ent(D) = -Σ pk log2 pk
计算过程:
p1 = 50/100 = 0.500-0.500 × log2(0.500) = 0.500
p2 = 50/100 = 0.500-0.500 × log2(0.500) = 0.500
总和 =1.000

调整类别分布

总样本数: 100
样本数: 50(50.0%)
样本数: 50(50.0%)

类别分布

50%50%
💡

观察要点:

  • • 当所有样本属于一个类别时,熵为 0(完全纯)
  • • 当各类别样本数量相等时,熵达到最大值(最混乱)
  • • 信息熵衡量的是数据集的不确定性或混乱程度
  • • 决策树的目标是通过划分降低熵,使子节点更"纯"
📈

信息增益 (Information Gain) - ID3

信息增益表示使用属性 a 进行划分所获得的"纯度提升"。 信息增益越大,说明使用属性 a 划分后纯度提升越大。

Gain(D, a) = Ent(D) - Σ (|Dv|/|D|) × Ent(Dv)

Dv 表示属性 a 取值为 v 的样本子集

⚠️ 信息增益的偏好

信息增益倾向于选择取值数目较多的属性(如"编号"属性), 这可能导致过拟合。C4.5 算法通过信息增益率来缓解这个问题。

📊

信息增益率 (Gain Ratio) - C4.5

信息增益率通过引入"固有值"来对信息增益进行归一化,缓解信息增益对取值数目多的属性的偏好:

Gain_ratio(D, a) = Gain(D, a) / IV(a)

IV(a) = -Σ (|Dv|/|D|) × log2(|Dv|/|D|)

IV(a) 称为属性 a 的固有值,属性取值数目越多,IV(a) 通常越大

💡 C4.5 的启发式策略

先从候选属性中找出信息增益高于平均水平的属性, 再从中选择信息增益率最高的。

🎲

基尼指数 (Gini Index) - CART

基尼指数反映了从数据集 D 中随机抽取两个样本,其类别标记不一致的概率。 基尼指数越小,数据集的纯度越高。

Gini(D) = 1 - Σ pk²

Gini_index(D, a) = Σ (|Dv|/|D|) × Gini(Dv)

选择使得 Gini_index 最小的属性作为最优划分属性

✓ 优势
  • 计算简单,不需要对数运算
  • CART 算法的默认指标
  • 适合二叉树结构
📌 特点
  • 偏向选择特征值较多的特征
  • 对不平衡数据集敏感
🎮

决策树构建可视化

选择划分标准(信息增益、信息增益率、基尼指数),观察决策树的构建过程。点击节点查看详细信息和计算过程。

当前使用: 信息增益 (Information Gain)
1234

特征空间与决策边界

特征 X特征 Y类别 0类别 1

决策树结构

X4.5C0C1内部节点叶节点(0)叶节点(1)
💡

使用说明:

  • • 左图显示特征空间,黄色虚线是决策边界
  • • 右图显示决策树结构,点击节点查看详细信息
  • • 尝试不同的划分标准和深度,观察树结构的变化
  • • 信息增益率对取值多的属性惩罚更强,可缓解过拟合
4.3

剪枝处理

✂️

为什么需要剪枝?

决策树在训练时为了尽可能正确分类训练样本,会不断分裂生长。 这可能导致过拟合: 树的分支过多过细,把训练集自身的特点当作了所有数据的一般性质。

过拟合的表现
  • 训练误差很低,但测试误差很高
  • 树的深度过大,叶节点数量过多
  • 对训练数据的噪声过度敏感

剪枝是决策树学习算法对付过拟合的主要手段,通过主动去掉部分分支来降低过拟合风险。

🛑

预剪枝 (Pre-Pruning)

在决策树生成过程中,提前停止树的生长。 在每个节点划分前,先评估划分是否能提升泛化性能。

策略
  • 限制树的最大深度
  • 限制节点的最小样本数
  • 限制信息增益的最小阈值
  • 使用验证集评估划分效果

✓ 优点:计算开销小,生成过程直接停止

✗ 缺点:可能过早停止,欠拟合风险

✂️

后剪枝 (Post-Pruning)

先生成完整的决策树,然后自底向上地检查非叶节点, 若将该节点替换为叶节点能提升泛化性能,则进行剪枝。

过程
  1. 生成完整决策树
  2. 从叶节点向上考察每个非叶节点
  3. 若剪枝后验证集性能提升,则剪枝
  4. 重复直到无法继续剪枝

✓ 优点:保留更多有用分支,泛化性能更好

✗ 缺点:训练时间更长,需要额外验证集

⚖️

剪枝对比

特性预剪枝后剪枝
时机生成过程中生成完成后
计算开销
过拟合风险更低
欠拟合风险较高
泛化性能较好更好
4.4

连续值与缺失值

📏

处理连续值属性

前面讨论的都是离散属性。 但实际任务中常会遇到连续属性(如身高、体重、温度)。 最常用的方法是二分法(Binary Split)

连续属性离散化
1️⃣

排序

将连续属性的所有取值按从小到大排序:a1, a2, ..., an

2️⃣

候选划分点

考虑相邻两个值的中点:ti = (ai + ai+1) / 2

3️⃣

选择最优划分点

将样本分为 ≤ t 和 > t 两部分,计算信息增益,选择最优的 t

💡 关键特性

与离散属性不同,连续属性在生成子树时可以继续使用(多次划分)。 例如,可以先判断"年龄 <= 30",在某个分支下再判断"年龄 <= 25"。

处理缺失值

现实任务中常会遇到属性值缺失的情况。 这给决策树学习带来两个问题:

问题1:属性选择

如何在某属性值缺失的情况下,进行划分属性的选择?

问题2:样本划分

给定划分属性后,若某样本在该属性上的值缺失,如何对该样本进行划分?

解决方案
方法1:样本权重

为每个样本赋予权重 w,初始时 w = 1。在属性选择时,只考虑该属性上无缺失值的样本, 根据这些样本的权重比例来调整信息增益的计算。

ρ = Σ(无缺失样本权重) / Σ(全部样本权重)

方法2:同时划入多个分支

若某样本在划分属性上的值缺失,则将该样本同时划入所有子节点, 但权重按子节点样本比例分配。

例如:某节点有 60% 样本进入左子树,40% 进入右子树。 缺失值样本以 0.6 的权重进入左子树,0.4 的权重进入右子树。

🔧

其他缺失值处理方法

删除法

直接删除包含缺失值的样本。简单但可能损失大量信息,仅适用于缺失比例很小的情况。

填充法

用某个值填充缺失值:

  • 均值/众数:用该属性的平均值或最常见值填充
  • 同类均值:用相同类别样本的均值填充
  • 模型预测:用其他算法预测缺失值
4.5

优缺点与应用

优点

  • 可解释性强

    决策过程直观,可以转换为规则

  • 处理能力强

    可处理连续值、类别型、缺失值

  • 无需归一化

    对数据缩放不敏感

  • 训练快速

    适合大规模数据集

  • 特征选择

    自动进行特征筛选

缺点

  • 容易过拟合

    需要剪枝来控制复杂度

  • 不稳定

    数据微小变化可能导致树结构大变

  • 贪心策略

    局部最优,无法保证全局最优

  • 类别不平衡

    倾向于多数类

  • 轴对齐限制

    只能沿特征轴划分,难以处理斜向边界

🎯

实际应用场景

🏥
医疗诊断

根据症状、检查结果等制定诊断规则,医生可以理解决策依据

💳
信用评估

根据个人信息、财务状况评估信用风险,结果可解释

📧
垃圾邮件过滤

根据邮件特征快速判断是否为垃圾邮件

🎮
游戏AI

NPC决策树,根据玩家行为做出不同反应

🛒
推荐系统

根据用户画像和行为推荐商品

🔍
欺诈检测

识别异常交易模式,防范金融欺诈

🚀

改进与扩展

为了克服单棵决策树的缺点,研究者提出了多种改进方法:

随机森林 (Random Forest)

集成多棵决策树,通过"投票"提高稳定性和准确率。 是最流行的集成学习方法之一。

梯度提升树 (GBDT)

通过逐步拟合残差来提升性能。XGBoost、LightGBM 等是其高效实现。

多变量决策树

每个内部节点使用多个属性的线性组合进行测试,可以处理斜向边界。

增量学习

支持在线学习,新数据到来时无需重新训练整棵树。

📝

本章小结

决策树通过递归划分构建树结构,每个内部节点对应属性测试,叶节点对应决策结果

信息增益(ID3)、信息增益率(C4.5)、基尼指数(CART)是三种主流的划分标准

信息熵衡量样本集合的纯度,熵越小表示纯度越高

剪枝是对抗过拟合的主要手段,分为预剪枝和后剪枝两种策略

连续值通过二分法离散化,缺失值通过样本权重和多分支划入处理

决策树具有可解释性强、训练快速等优点,但容易过拟合、对数据敏感

集成方法(如随机森林、GBDT)通过组合多棵树显著提升性能