1916 字
10 分钟
模式识别与机器学习:决策树——ID3、C4.5与CART
2026-07-03
无标签
TIP

想象你是一个医生,要根据病人的症状判断病情。你习惯先问”发烧吗?“——如果发烧,再问”咳嗽吗?“——如果咳嗽,再问”痰的颜色?”……这样一串问答就形成了一棵决策树

决策树是一种基于树结构的监督学习模型,既可以做分类也可以做回归。它的核心思想是:从根节点开始,逐层根据特征对样本空间进行划分,每个叶子节点对应一个决策结果。

基本概念#

一棵决策树由以下元素构成:

  • 根节点:包含全部训练样本
  • 内部节点:对应一个特征的测试条件
  • 分支:测试的每个可能输出
  • 叶子节点:最终的分类/回归结果

从根到叶子的每条路径就是一条决策规则(if-then规则的集合),这些规则互斥且完备。

决策树学习的核心问题:每一步选哪个特征来分裂? 选法不同就催生了不同的算法。

ID3 —— 信息增益#

ID3(Iterative Dichotomiser 3,Quinlan 1986)基于信息论选择分裂特征。

#

设样本集合 DD 中有 KK{C1,C2,,CK}\{C_1, C_2, \ldots, C_K\},将样本划分成 KK 个子集 D={D1,D2,,DK}D=\{D_1, D_2, \ldots, D_K\},第 jj 类样本占比 pj=DjDp_j=\frac{|D_j|}{|D|} (用频率近似),则 DD定义为:

H(D)=j=1Kpjlog2pjH(D) = -\sum_{j=1}^{K} p_j \log_2 p_j
  • 熵度量不确定性
  • 熵越大,类别越混;
  • 熵越小,类别越纯。
  • DD 全部属于同一类,则 H(D)=0H(D)=0

条件熵#

用特征 AADD 划分:假设特征 AAvv 种可能的取值,将样本 DD 分为vv 个子集 D={D1,D2,,Dv}D=\{D_1, D_2, \ldots, D_v\},则条件熵(按特征 AA 划分后的加权平均熵)为:

H(DA)=i=1vDiDH(Di)H(D \mid A) = \sum_{i=1}^{v} \frac{|D_i|}{|D|} H(D_i)
  • Di|D_i| 表示集合 DiD_i 的元素个数,按子集大小加权求和
  • 对于 vv 的含义,例如AA 是”颜色”,可能取值为”红、绿、蓝”,则 v=3v=3;如果A是二值特征(如”是否发烧”),则 v=2v=2。对于近似连续的特征(如”身高”),可以先离散化为若干区间(找分裂阈值)。
TIP

条件熵用特征的取值可能来划分样本集合,熵用类别标签来划分

信息增益(Information Gain)#

特征 AA 对数据集 DD 的信息增益:

IG(D,A)=H(D)H(DA)=H(D)i=1vDiDH(Di)\text{IG}(D, A) = H(D) - H(D \mid A)=H(D)-\sum_{i=1}^{v} \frac{|D_i|}{|D|} H(D_i)

ID3 策略#

在每一步选择 IG(D,A)\text{IG}(D, A) 最大的特征A来分裂,递归构建,直到:

  • 子集中所有样本属于同一类
  • 无可选特征
  • 超过预设深度

:::warning [信息增益的偏好] 信息增益天然偏向取值多的特征vv 较大的特征)(比如”编号”这种每个样本一个取值的特征,信息增益极大但毫无泛化能力)。

原因:信息增益计算的是划分前后熵的减少量,取值多的特征,vv 更大,划分后子集更小,熵更低,导致信息增益更大。 :::

C4.5 —— 信息增益率#

C4.5(Quinlan 1993)是 ID3 的改进版,用增益率代替信息增益:

增益率#

定义特征 AA固有值(Intrinsic Value)或分裂信息(Split Information),其实就是特征 AA 本身的熵。:

IV(A)=j=1vDjDlog2DjD\text{IV}(A) = -\sum_{j=1}^{v} \frac{|D_j|}{|D|} \log_2 \frac{|D_j|}{|D|}
NOTE

这个和熵的公式很像,但是这里的 DjD_j 是按特征 AA取值可能划分的子集,而不是类别划分的子集。

增益率:

GainRatio(D,A)=IG(D,A)IV(A)\text{GainRatio}(D, A) = \frac{\text{IG}(D, A)}{\text{IV}(A)}

C4.5 策略:不直接选增益率最大的特征(因为 IV(A)\text{IV}(A) 小时增益率会被过度放大),而是先选出信息增益高于平均水平的特征,再从中选增益率最大的。

C4.5 的其他改进#

改进点说明
连续值处理对连续特征排序,尝试每对相邻值的中点作为分裂阈值
缺失值处理用带权样本参与分裂,缺失值按权重分配到各分支
剪枝后剪枝(PEP),用悲观误差估计防止过拟合
多值处理增益率天然压制多值特征

CART —— 基尼指数#

CART(Classification And Regression Tree,Breiman 1984)既可以做分类,也可以做回归,且生成的是二叉树。对比之下ID3和C4.5生成的是多叉树(分类用的特征有vv 种取值,就有 vv 个分支)。CART不仅能做分类,还能做回归

基尼指数#

对于数据集 DD,有KK个类别,将样本集合划分为 KK 个子集 D={D1,D2,,DK}D=\{D_1, D_2, \ldots, D_K\},第 jj 类样本占比 pj=DjDp_j=\frac{|D_j|}{|D|},基尼值(Gini impurity)定义为:

Gini(D)=j=1Kkjpjpk=1j=1Kpj2\text{Gini}(D) = \sum_{j=1}^{K} \sum_{k' \neq j} p_j p_{k'} = 1 - \sum_{j=1}^{K} p_j^2

Gini(D)\text{Gini}(D) 反映了从 DD 随机抽取两个样本,其类别不一致概率。越小表示纯度越高,越大越不纯。

基尼指数和熵在物理意义上完全等价(都表示不纯度),只是数值范围不同(基尼最大0.5,熵最大1)

用特征 AA 划分后(CART 对每个特征做二分),基尼指数:

GiniIndex(D,A)=j=1vDjDGini(Dj)\text{GiniIndex}(D, A) = \sum_{j=1}^{v} \frac{|D_j|}{|D|} \text{Gini}(D_j)

CART 分类策略:选 GiniIndex(D,A)\text{GiniIndex}(D, A) 最小的特征和分裂点。

CART 回归树#

对于回归任务,分裂准则不再是基尼指数,而是均方误差(MSE):

minA,s[minc1xiD1(yic1)2+minc2xiD2(yic2)2]\min_{A, s} \left[ \min_{c_1} \sum_{\mathbf{x}_i \in D_1} (y_i - c_1)^2 + \min_{c_2} \sum_{\mathbf{x}_i \in D_2} (y_i - c_2)^2 \right]

其中 c1,c2c_1, c_2 分别是左右子集的输出值(取该子集 yy 的均值)。递归划分,叶子节点的预测值即为该叶子上样本的均值。

剪枝#

决策树容易过拟合(理论上可以做到训练误差为零),剪枝是关键的正则化手段。

预剪枝#

在构建过程中提前停止:

  • 限制树的最大深度
  • 限制节点的最少样本数
  • 限制分裂后的信息增益阈值
  • 用验证集评估:若划分不能提高验证集精度则停止

优点:效率高 缺点:可能过早停止,错过后续的好划分(视界局限效应)

后剪枝#

先让树充分生长,再自底向上合并叶子:

CART 代价复杂度剪枝(CCP): 定义损失函数:

Cα(T)=t=1TNtGini(Tt)+αTC_\alpha(T) = \sum_{t=1}^{|T|} N_t \cdot \text{Gini}(T_t) + \alpha |T|
  • T|T| 是叶子数
  • NtN_t 是叶子 tt 的样本数
  • α\alpha 是平衡拟合度与复杂度的参数

对每个 α\alpha,存在一棵最优子树。通过交叉验证选择最优 α\alpha

C4.5 悲观剪枝(PEP): 用训练集估计误差,加上一个惩罚项(连续修正),自底向上判断是否合并。

三大算法对比#

维度ID3C4.5CART
分裂准则信息增益增益率基尼指数 / MSE
树结构多叉树多叉树二叉树
连续值不支持支持支持
缺失值不支持支持支持
剪枝不支持后剪枝(PEP)后剪枝(CCP)
输出分类分类分类 + 回归

决策树的优缺点#

优点

  • 可解释性极强(白箱模型),规则可以直接阅读
  • 无需特征缩放(对数值范围不敏感)
  • 可以处理非线性关系
  • 天然处理混合类型特征

缺点

  • 容易过拟合(必须剪枝)
  • 对数据微小变化敏感(不稳定,可用 Bagging + 随机森林缓解)
  • 贪婪搜索(每步最优不保证全局最优)
  • 偏向于多值特征(ID3 尤其严重)
  • 决策边界是平行于坐标轴的(难以拟合斜线分割)

总结#

信息增益 → ID3(基础,偏好多值特征)
增益率 → C4.5(改进,连续值 + 缺失值 + 剪枝)
基尼指数 → CART(二叉树,分类 + 回归,CCP 剪枝)

三者关系:ID3 → C4.5(直接改进)和 ID3 → CART(并行发展)。目前工业界最常用的是 CART(随机森林和 GBDT 的基础模型)。

模式识别与机器学习:决策树——ID3、C4.5与CART
https://biscuit0613.github.io/posts/ml/decisiontree/
作者
Biscuit
发布于
2026-07-03
许可协议
CC BY-NC-SA 4.0
The AI Scientist: Towards Fully Automated Open-Ended Scientific Discovery
去噪前沿:CBDNet、自监督方法与新趋势