CART
ID3
C4.5

对比三种算法

以下是 C4.5、ID3 和 CART回归任务连续值特征的支持对比:

特性 ID3 C4.5 CART
任务类型 仅分类 仅分类 分类 + 回归
连续特征支持 需手动分箱 自动二分 自动二分
分裂标准 信息增益 信息增益比 分类:基尼系数
回归:MSE
缺失值处理 不支持 支持 支持
树结构 多叉树 多叉树 二叉树

如何选择算法?

  • 分类任务
  • 优先选 C4.5(支持连续值和缺失值,避免ID3的多值偏好问题)。
  • 若需二叉树或兼容回归,选 CART
  • 回归任务:只能选 CART
  • 简单需求:若数据全是离散值且无缺失值,可用 ID3(但实际很少单独使用)。

特征选择

计算信息增益/比都可以进行特征筛选,后者更优

特征增益没有绝对含义,通过相对熵来归一化尺度得到特征增益比(类多,相对熵大影响其绝对值的含义),实际上归一化系数常使用分裂信息计算,即某个属性Ag划分概率比例得到的熵

ID3步骤


步骤1,2分别处理标签全相同和没有数据集的情况,用于迭代终止

需要选择一个阈值,找到最大信息增益的特征,最大信息增益小于阈值的设置为单结点树,使用最多类作为预测值,结束迭代;大于阈值的则继续迭代,对于每个特征的值都划分成子树,并将数据集y去除那个划分特征、X根据划分特征Ag取值划分为多份到不同子结点,重复训练。


C4.5

根据《统计学习方法》, 只是将信息增益替换成信息增益比;但是有别的说法

C4.5 正规说法:

算法步骤

C4.5算法是ID3算法的改进版本,主要用于生成决策树,核心思想是通过信息增益比(Gain Ratio)选择最优划分属性。以下是C4.5算法的详细步骤:

1. 数据准备

  • 输入:训练数据集$D ),包含类别标签的样本。
  • 属性集:所有候选属性$A = {A_1, A_2, …, A_m} )(包括离散和连续属性)。
  • 标签:类别集合$C = {C_1, C_2, …, C_k} )。

2. 递归构建决策树

递归终止条件

  1. 当前节点所有样本属于同一类别,标记为叶子节点并返回该类。
  2. 属性集为空,或样本在所有属性上取值相同,标记为叶子节点并返回多数类。
  3. 样本集为空(极少发生),返回父节点多数类。

未终止时步骤

  1. 计算信息增益比
  • 信息熵(Entropy)
    $\text{Entropy}(D) = -\sum_{i=1}^{k} p_i \log_2(p_i)$
    其中$p_i$是类别$C_i$在数据集$D$中的比例。

  • 信息增益(Gain)
    对属性$A_j$,按取值将$D$划分为子集${D_1, D_2, …, D_v} ),计算:
    $\text{Gain}(D, A_j) = \text{Entropy}(D) - \sum_{i=1}^{v} \frac{|D_i|}{|D|} \text{Entropy}(D_i)$

  • 分裂信息(Split Information)
    $\text{SplitInfo}(D, A_j) = -\sum_{i=1}^{v} \frac{|D_i|}{|D|} \log_2 \left( \frac{|D_i|}{|D|} \right)$
    衡量属性$A_j$的分支数量均匀性。

  • 信息增益比(Gain Ratio)
    $\text{GainRatio}(D, A_j) = \frac{\text{Gain}(D, A_j)}{\text{SplitInfo}(D, A_j)}$
    选择增益比最大的属性作为划分属性。

  1. 处理连续属性(C4.5新增):
  • 对连续属性$A_j$,将样本按取值排序,计算相邻值中点作为候选划分点。
  • 选择使信息增益最大的划分点,将其转化为二元分裂(如“$A_j \leq a$”),计算信息增益比
  1. 处理缺失值(C4.5改进):
  • 按非缺失样本上该属性值的比例随机分配权重到子节点。
  • 计算信息增益时,忽略缺失该属性的样本。
  • C4.5 在处理 连续属性(数值型特征) 时,默认会将其 二分(Binary Split),生成 二叉树结构
  1. 生成子树
  • 用选择的属性$A_j$划分数据集$D$为子集$D_1, D_2, …, D_v$。
  • 对每个非空子集递归调用C4.5算法生成子树。

3. 决策树剪枝(后剪枝)

  • 目的:避免过拟合,提升泛化能力。
  • 方法:用验证集评估剪枝前后的性能,若剪枝后误差降低,则替换子树为叶子节点。

4. 输出决策树

  • 返回生成的决策树模型,可用于对新样本分类。

关键改进(对比ID3)

  1. 信息增益比:解决ID3偏向多值属性的问题。
  2. 连续属性处理:支持数值型数据。
  3. 缺失值处理:通过权重分配提高鲁棒性。
  4. 剪枝机制:后剪枝优化树结构。

[[决策树剪枝]]


C4.5 与 ID3 的区别对比

C4.5 是 ID3 算法的改进版本,由 Ross Quinlan 提出,主要解决了 ID3 的几个关键缺陷。以下是两者的核心区别:


1. 特征选择标准

算法 标准 说明
ID3 信息增益 (Information Gain) 选择信息增益最大的特征分裂节点,但对取值多的特征有偏好(容易过拟合)。
C4.5 信息增益比 (Gain Ratio) 通过除以特征的固有信息(Split Information)来惩罚取值多的特征,更平衡分裂选择。

公式对比

  • 信息增益
    $\text{Gain}(S, A) = \text{Entropy}(S) - \sum_{v \in A} \frac{|S_v|}{|S|} \text{Entropy}(S_v) )
  • 信息增益比
    $\text{GainRatio}(S, A) = \frac{\text{Gain}(S, A)}{\text{SplitInformation}(S, A)} )
    其中$\text{SplitInformation}(S, A) = -\sum_{v \in A} \frac{|S_v|}{|S|} \log_2 \frac{|S_v|}{|S|} )。

示例

  • 若某特征有唯一ID(每个样本值不同),ID3会优先选择它(信息增益最大),但C4.5会因Split Information过高而降低其增益比。

2. 处理连续型特征

算法 支持连续特征? 处理方法
ID3 ❌ 不支持 只能处理离散型特征,需手动分箱预处理。
C4.5 ✅ 支持 自动对连续特征排序并找到最佳分裂点(如“年龄>30”),无需人工干预。

实现方式
C4.5 遍历连续特征的所有可能分割点,选择信息增益比最高的阈值。


3. 缺失值处理

算法 支持缺失值? 处理方法
ID3 ❌ 不支持 需提前填充或删除缺失值。
C4.5 ✅ 支持 1. 按已知值的比例分配样本到子节点;
2. 分裂时调整信息增益计算,忽略缺失样本。

4. 剪枝策略(防止过拟合)

算法 剪枝方法 说明
ID3 ❌ 无剪枝 生成完全生长的树,容易过拟合。
C4.5 ✅ 悲观剪枝(Pessimistic Pruning) 通过统计显著性检验(如卡方检验)剪除对泛化性能无益的分支,提升模型简洁性。

剪枝示例
若某子树在训练集上准确率提升不显著(可能因噪声导致),C4.5会将其替换为叶子节点。


CART VS C4.5

特征 CART C4.5
任务类型 分类 + 回归 仅分类(后续扩展支持回归)
分裂标准 基尼系数(Gini Index)或均方差(MSE) 信息增益比(Gain Ratio)
树结构 二叉树(每个节点只有两个分支) 多叉树(根据特征取值数量分支)
剪枝方法 代价复杂度剪枝(Cost-Complexity Pruning) 悲观剪枝(Pessimistic Pruning)
缺失值处理 通过替代分裂(Surrogate Splits) 直接处理缺失值(加权信息增益)
连续特征处理 自动二分(寻找最佳分割点) 自动二分(类似CART)
适用场景 更通用(支持回归任务) 主要用于分类

2. 详细对比


总结:C4.5 对 ID3 的改进

  1. 更公平的特征选择:用信息增益比替代信息增益,减少对多值特征的偏好。
  2. 支持连续特征和缺失值:直接处理现实数据中的复杂情况。
  3. 引入剪枝:通过后剪枝降低过拟合风险。
  4. 工程友好性:无需手动分箱或处理缺失值,更适合实际应用。

附加对比:C4.5 与 CART

虽然问题未提及,但常有人混淆C4.5与CART(Classification and Regression Trees):

  • C4.5:生成多叉树,基于信息增益比,仅支持分类任务。
  • CART:生成二叉树,基于基尼系数,支持分类和回归。