共计 1086 个字符,预计需要花费 3 分钟才能阅读完成。
背景介绍
决策树是机器学习中最直观且易于理解的算法之一,它通过树状结构模拟人类决策过程。C4.5 作为 ID3 算法的改进版,解决了 ID3 的两大缺陷:无法处理连续属性和倾向于选择取值较多的属性。它的核心改进是引入信息增益比(Gain Ratio),有效平衡了分支数量带来的偏差。

算法原理
信息增益比的计算
C4.5 不再直接使用信息增益,而是用信息增益比作为划分标准:
# 计算信息增益比示例
from math import log2
def gain_ratio(feature, target):
# 1. 先计算原始信息熵 H(D)
# 2. 计算该特征的条件熵 H(D|A)
# 3. 计算信息增益 = H(D) - H(D|A)
# 4. 计算特征固有值 IV(A)
# 5. 信息增益比 = 信息增益 / IV(A)
return gain / iv
与 ID3 的主要区别:
1. 能处理连续值(通过二分法离散化)
2. 采用增益比避免偏向多值属性
3. 支持缺失值处理
4. 增加了剪枝步骤
例题解析
数据集示例
以经典的天气预测是否打高尔夫为例:
| 天气 | 温度 | 湿度 | 风速 | 打球 |
|---|---|---|---|---|
| 晴 | 高 | 高 | 弱 | 否 |
| 晴 | 高 | 高 | 强 | 否 |
| … | … | … | … | … |
计算步骤
-
计算目标类(打球)的初始熵:
H(打球) = - (9/14)*log2(9/14) - (5/14)*log2(5/14) ≈ 0.940 -
计算各特征的信息增益比(以天气为例):
- 天气的三种取值:晴 (2/ 5 打)、阴 (4/4)、雨 (3/5)
- 条件熵 = 5/14H(晴) + 4/14H(阴) + 5/14*H(雨)
- 信息增益 = 0.940 – 0.694 ≈ 0.246
- 固有值 IV(天气) = 1.577
-
增益比 = 0.246/1.577 ≈ 0.156
-
比较所有特征的增益比,选择最大的作为根节点
完整构建过程:
1. 第一次分裂选择增益比最大的 ” 天气 ”
2. 在 ” 阴 ” 分支可直接确定为 ” 打球 ”(纯节点)
3. 其他分支继续递归划分
剪枝策略
预剪枝
- 在构建树时提前停止生长:
- 设置最大深度
- 节点样本数少于阈值
- 增益比小于阈值
后剪枝
- 先构建完整树再剪枝:
- 计算剪枝前后的验证集精度
- 如果精度不下降则剪枝
- C4.5 采用悲观剪枝(考虑统计波动)
避坑指南
- 连续值未离散化:
-
解决方法:使用二分法寻找最佳分割点
-
遇到缺失值直接报错:
-
正确做法:按样本权重分配
-
忽略特征缩放:
-
连续特征需要归一化
-
过拟合问题:
-
必须使用剪枝策略
-
类别不平衡:
- 可采用加权增益比
总结与思考
优势:
– 可解释性强
– 无需特征缩放
– 天然处理多分类
局限:
– 对数据变化敏感
– 容易生成复杂树
– 计算成本较高
适用场景:
1. 需要可解释模型的业务场景
2. 特征包含混合类型(连续 + 离散)
3. 数据缺失较多的场景
建议后续可以尝试:
1. 与随机森林结合降低方差
2. 用 Graphviz 可视化决策过程
3. 对比 CART 算法的差异
