[机器学习]C4.5决策树算法(介绍)

405 阅读7分钟

C4.5 是决策树算法中的经典算法之一,由 Ross Quinlan 在 ID3 算法的基础上改进而来。

它解决了 ID3 的多个局限性(如对连续值、缺失值和过拟合的处理),并引入了信息增益率(Gain Ratio)作为属性选择标准。

以下是 C4.5 算法的详细解析:


1. 核心思想

C4.5 的目标是通过递归划分数据集,构建一棵分类树,使每个分支尽可能“纯净”(即同一类别样本占比高)。其核心改进包括:

  • 处理连续型属性:通过动态二分法将连续值离散化。
  • 处理缺失值:允许样本缺失属性值,并采用概率分配机制。
  • 剪枝优化:通过后剪枝(Post-Pruning)避免过拟合。
  • 信息增益率:解决 ID3 算法对多值属性的偏好问题。

2. 属性选择标准:信息增益率

C4.5 使用信息增益率(而非 ID3 的信息增益)选择分裂属性,避免偏向取值较多的属性。

(1) 信息熵(Entropy)

衡量数据集的混乱程度,信息越混乱, 则信息熵越大.

公式为:

Entropy(D)=−∑i=1Cpilog⁡2piEntropy(D)=−i=1∑C​pi​log2​pi​

其中 CC 是类别数,pipi​ 是第 ii 类的样本比例。

(2) 信息增益(Information Gain)

分裂后的熵减少量,公式为:

Gain(D,A)=Entropy(D)−∑v=1V∣Dv∣∣D∣Entropy(Dv)Gain(D,A)=Entropy(D)−v=1∑V​∣D∣∣Dv​∣​Entropy(Dv​)

其中 AA 是属性,VV 是属性 AA 的取值数,DvDv​ 是属性 AA 取第 vv 个值的子集。

(3) 固有信息(Intrinsic Information)

衡量属性本身的复杂度(取值数目与分布),公式为:

IV(A)=−∑v=1V∣Dv∣∣D∣log⁡2∣Dv∣∣D∣IV(A)=−v=1∑V​∣D∣∣Dv​∣​log2​∣D∣∣Dv​∣​

(4) 信息增益率(Gain Ratio)

信息增益与固有信息的比值,公式为:

Gain_Ratio(D,A)=Gain(D,A)IV(A)Gain_Ratio(D,A)=IV(A)Gain(D,A)​

选择属性时,优先选择信息增益率最高的属性


3. 处理连续型属性

C4.5 将连续属性转换为二元分类问题:

  1. 排序:对连续属性值从小到大排序。
  2. 候选分割点:取相邻两个不同类别样本的中间值作为候选分割点。
  3. 选择最优分割点:计算每个候选点的信息增益率,选择最优分割点将属性分为两部分(如 A≤tA≤t 和 A>tA>t)。

示例
假设属性“温度”的值为 [22, 25, 28, 30],对应类别为 [N, Y, N, Y],候选分割点为:

  • (22+25)/2 = 23.5
  • (25+28)/2 = 26.5
  • (28+30)/2 = 29.0
    计算每个分割点的信息增益率,选择最佳分割点(如 26.5)。

4. 处理缺失值

C4.5 允许样本的某些属性值缺失,处理策略如下:

(1) 训练阶段

  • 计算信息增益率时:仅使用属性 AA 未缺失的样本。
  • 样本权重分配:将缺失值的样本按概率分配到所有子节点中(权重为各子节点样本占比)。

(2) 预测阶段

  • 若遇到缺失值,同时遍历所有分支,根据分支的样本权重综合预测结果。

5. 剪枝(Pruning)

C4.5 使用**悲观剪枝法(Pessimistic Error Pruning)**避免过拟合:

  1. 计算剪枝前的误差上界:基于训练误差和修正项(类似统计置信区间)。
  2. 计算剪枝后的误差:若剪枝后的误差小于剪枝前,则剪枝。

修正项公式

Error_Upper_Bound=training_error+z22N+ztraining_error(1−training_error)N+z24N2Error_Upper_Bound=training_error+2Nz2​+zNtraining_error(1−training_error)​+4N2z2​

其中 zz 是置信参数(如取 0.69 对应 75% 置信度),NN 是节点样本数。


6. 算法步骤

  1. 输入:训练集 DD,属性集 AA,阈值 ϵϵ(最小信息增益率)。

  2. 递归建树

    • 若 DD 中样本全属于同一类别,返回叶节点。

    • 若 AA 为空,返回叶节点(类别为多数类)。

    • 否则,选择信息增益率最高的属性 A∗A∗。

    • 若 A∗A∗ 的信息增益率 < ϵϵ,返回叶节点。

    • 否则,按 A∗A∗ 的取值划分子树:

      • 若 A∗A∗ 是离散属性,生成多叉分支。
      • 若 A∗A∗ 是连续属性,生成二元分支。
  3. 剪枝:对生成的树进行后剪枝优化。


7. 优缺点

优点

  • 支持处理连续型属性和缺失值。
  • 通过信息增益率减少对多值属性的偏好。
  • 剪枝机制降低过拟合风险。

缺点

  • 生成多叉树,结构复杂度高。(c4.5依然是多叉树,虽然有剪枝机制,但是树的复杂度依然很高)
  • 对内存和计算资源需求较大。
  • 剪枝策略依赖启发式规则,可能不够稳定。

8. 示例

数据集

天气温度湿度风力是否打球

步骤

  1. 计算每个属性的信息增益率。
  2. 发现“天气”的信息增益率最高,按“天气=晴/阴/雨”划分。
  3. 递归处理子节点,直到满足终止条件。

9. C4.5 vs CART

特性C4.5CART
树结构多叉树二叉树
分裂标准信息增益率基尼指数(分类)或均方差(回归)
连续值处理动态二分法动态二分法
缺失值处理概率分配代理分裂(Surrogate Splits)
主要用途分类分类与回归

c4.5算法的剪枝策略

C4.5算法使用的剪枝方法属于后剪枝(Post-Pruning)中的悲观错误剪枝(Pessimistic Error Pruning, PEP)

其核心思想是通过统计方法估计剪枝前后的错误率,避免模型过拟合,以提高泛化能力。


关键点解析:

  1. 剪枝类型

    • 后剪枝:先生成完整的决策树,再自底向上对非叶节点进行考察,判断是否将其替换为叶节点以简化模型。
  2. 剪枝原理(悲观错误剪枝)

    • 假设每个节点的分类错误服从二项分布,通过引入连续性校正(如添加0.5的修正项),计算剪枝前后的错误率上界。
    • 若剪枝后父节点的估计错误率不超过子树错误率的置信区间上界,则进行剪枝。
  3. 具体步骤

    • 计算子树的加权错误率:根据叶节点的错误样本数和置信度(如75%置信度对应正态分布的Z值),计算错误率上界。
    • 计算剪枝后的错误率:将子树替换为叶节点后,统计该叶节点的错误样本数,并加上校正项。
    • 比较错误率:若剪枝后的错误率不高于剪枝前的错误率置信区间上界,则剪枝。
  4. 优势

    • 无需独立验证集,直接基于训练数据估计错误率。
    • 通过统计校正避免乐观估计,更保守地防止过拟合。

示例说明:

假设某子树有100个样本,其中5个分类错误:

  • 剪枝前:子树错误率上界可能为5 + 0.5 + 1.96√(5×0.95) ≈ 8.3(置信度75%)。
  • 剪枝后:若父节点叶子的错误数为6,加上校正后为6.5。
  • 决策:由于6.5 < 8.3,剪枝被接受。

总结:

C4.5通过悲观错误剪枝(后剪枝的一种),在保持模型预测能力的前提下简化决策树结构,有效平衡了拟合与泛化能力。这一方法结合统计校正,避免了依赖额外验证集,是其区别于其他剪枝策略的核心特征。

总结

C4.5 是决策树发展中的重要里程碑,通过信息增益率和后剪枝机制(悲观错误剪枝)显著提升了模型的鲁棒性。

尽管后续算法(如CART)在效率上更优,但 C4.5 的思想(如信息增益率、缺失值处理)仍被广泛借鉴。

理解 C4.5 对学习决策树和集成模型(如 Gradient Boosting)具有重要意义。