C4.5决策树算法实战:从原理到例题解析

1次阅读
没有评论

共计 1086 个字符,预计需要花费 3 分钟才能阅读完成。

image.webp

背景介绍

决策树是机器学习中最直观且易于理解的算法之一,它通过树状结构模拟人类决策过程。C4.5 作为 ID3 算法的改进版,解决了 ID3 的两大缺陷:无法处理连续属性和倾向于选择取值较多的属性。它的核心改进是引入信息增益比(Gain Ratio),有效平衡了分支数量带来的偏差。

C4.5 决策树算法实战:从原理到例题解析

算法原理

信息增益比的计算

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. 增加了剪枝步骤

例题解析

数据集示例

以经典的天气预测是否打高尔夫为例:

天气 温度 湿度 风速 打球

计算步骤

  1. 计算目标类(打球)的初始熵:

    H(打球) = - (9/14)*log2(9/14) - (5/14)*log2(5/14) ≈ 0.940

  2. 计算各特征的信息增益比(以天气为例):

  3. 天气的三种取值:晴 (2/ 5 打)、阴 (4/4)、雨 (3/5)
  4. 条件熵 = 5/14H(晴) + 4/14H(阴) + 5/14*H(雨)
  5. 信息增益 = 0.940 – 0.694 ≈ 0.246
  6. 固有值 IV(天气) = 1.577
  7. 增益比 = 0.246/1.577 ≈ 0.156

  8. 比较所有特征的增益比,选择最大的作为根节点

完整构建过程:
1. 第一次分裂选择增益比最大的 ” 天气 ”
2. 在 ” 阴 ” 分支可直接确定为 ” 打球 ”(纯节点)
3. 其他分支继续递归划分

剪枝策略

预剪枝

  • 在构建树时提前停止生长:
  • 设置最大深度
  • 节点样本数少于阈值
  • 增益比小于阈值

后剪枝

  • 先构建完整树再剪枝:
  • 计算剪枝前后的验证集精度
  • 如果精度不下降则剪枝
  • C4.5 采用悲观剪枝(考虑统计波动)

避坑指南

  1. 连续值未离散化:
  2. 解决方法:使用二分法寻找最佳分割点

  3. 遇到缺失值直接报错:

  4. 正确做法:按样本权重分配

  5. 忽略特征缩放:

  6. 连续特征需要归一化

  7. 过拟合问题:

  8. 必须使用剪枝策略

  9. 类别不平衡:

  10. 可采用加权增益比

总结与思考

优势:
– 可解释性强
– 无需特征缩放
– 天然处理多分类

局限:
– 对数据变化敏感
– 容易生成复杂树
– 计算成本较高

适用场景:
1. 需要可解释模型的业务场景
2. 特征包含混合类型(连续 + 离散)
3. 数据缺失较多的场景

建议后续可以尝试:
1. 与随机森林结合降低方差
2. 用 Graphviz 可视化决策过程
3. 对比 CART 算法的差异

正文完
 0
评论(没有评论)