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=1Cpilog2piEntropy(D)=−i=1∑Cpilog2pi
其中 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∣log2∣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 将连续属性转换为二元分类问题:
- 排序:对连续属性值从小到大排序。
- 候选分割点:取相邻两个不同类别样本的中间值作为候选分割点。
- 选择最优分割点:计算每个候选点的信息增益率,选择最优分割点将属性分为两部分(如 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)**避免过拟合:
- 计算剪枝前的误差上界:基于训练误差和修正项(类似统计置信区间)。
- 计算剪枝后的误差:若剪枝后的误差小于剪枝前,则剪枝。
修正项公式:
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. 算法步骤
-
输入:训练集 DD,属性集 AA,阈值 ϵϵ(最小信息增益率)。
-
递归建树:
-
若 DD 中样本全属于同一类别,返回叶节点。
-
若 AA 为空,返回叶节点(类别为多数类)。
-
否则,选择信息增益率最高的属性 A∗A∗。
-
若 A∗A∗ 的信息增益率 < ϵϵ,返回叶节点。
-
否则,按 A∗A∗ 的取值划分子树:
- 若 A∗A∗ 是离散属性,生成多叉分支。
- 若 A∗A∗ 是连续属性,生成二元分支。
-
-
剪枝:对生成的树进行后剪枝优化。
7. 优缺点
优点
- 支持处理连续型属性和缺失值。
- 通过信息增益率减少对多值属性的偏好。
- 剪枝机制降低过拟合风险。
缺点
- 生成多叉树,结构复杂度高。(c4.5依然是多叉树,虽然有剪枝机制,但是树的复杂度依然很高)
- 对内存和计算资源需求较大。
- 剪枝策略依赖启发式规则,可能不够稳定。
8. 示例
数据集:
| 天气 | 温度 | 湿度 | 风力 | 是否打球 |
|---|---|---|---|---|
| 晴 | 高 | 高 | 弱 | 否 |
| 晴 | 高 | 高 | 强 | 否 |
| 阴 | 中 | 高 | 弱 | 是 |
| 雨 | 低 | 中 | 弱 | 是 |
步骤:
- 计算每个属性的信息增益率。
- 发现“天气”的信息增益率最高,按“天气=晴/阴/雨”划分。
- 递归处理子节点,直到满足终止条件。
9. C4.5 vs CART
| 特性 | C4.5 | CART |
|---|---|---|
| 树结构 | 多叉树 | 二叉树 |
| 分裂标准 | 信息增益率 | 基尼指数(分类)或均方差(回归) |
| 连续值处理 | 动态二分法 | 动态二分法 |
| 缺失值处理 | 概率分配 | 代理分裂(Surrogate Splits) |
| 主要用途 | 分类 | 分类与回归 |
c4.5算法的剪枝策略
C4.5算法使用的剪枝方法属于后剪枝(Post-Pruning)中的悲观错误剪枝(Pessimistic Error Pruning, PEP) 。
其核心思想是通过统计方法估计剪枝前后的错误率,避免模型过拟合,以提高泛化能力。
关键点解析:
-
剪枝类型:
- 后剪枝:先生成完整的决策树,再自底向上对非叶节点进行考察,判断是否将其替换为叶节点以简化模型。
-
剪枝原理(悲观错误剪枝) :
- 假设每个节点的分类错误服从二项分布,通过引入连续性校正(如添加0.5的修正项),计算剪枝前后的错误率上界。
- 若剪枝后父节点的估计错误率不超过子树错误率的置信区间上界,则进行剪枝。
-
具体步骤:
- 计算子树的加权错误率:根据叶节点的错误样本数和置信度(如75%置信度对应正态分布的Z值),计算错误率上界。
- 计算剪枝后的错误率:将子树替换为叶节点后,统计该叶节点的错误样本数,并加上校正项。
- 比较错误率:若剪枝后的错误率不高于剪枝前的错误率置信区间上界,则剪枝。
-
优势:
- 无需独立验证集,直接基于训练数据估计错误率。
- 通过统计校正避免乐观估计,更保守地防止过拟合。
示例说明:
假设某子树有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)具有重要意义。