ID3、C4.5 和 CART 算法详解

1. ID3 算法(Iterative Dichotomiser 3)

1.1 核心原理

  • 发明时间:1986年由Ross Quinlan提出
  • 基础思想:基于信息增益进行特征选择
  • 适用问题:仅支持分类问题(离散特征)

1.2 关键公式

信息熵
H ( S ) = − ∑ i = 1 c p i log ⁡ 2 p i H(S) = -\sum_{i=1}^c p_i \log_2 p_i H(S)=i=1cpilog2pi
其中 p i p_i pi是类别 i i i在集合 S S S中的比例

信息增益
I G ( S , A ) = H ( S ) − ∑ v ∈ V a l u e s ( A ) ∣ S v ∣ ∣ S ∣ H ( S v ) IG(S,A) = H(S) - \sum_{v \in Values(A)} \frac{|S_v|}{|S|} H(S_v) IG(S,A)=H(S)vValues(A)SSvH(Sv)

1.3 算法步骤

def ID3(data, target, features):
    1. 如果所有样本属于同一类别,返回单节点树
    2. 如果特征集为空,返回多数类节点
    3. 计算所有特征的信息增益
    4. 选择信息增益最大的特征A作为根节点
    5. 对A的每个可能取值v:
        a. 创建分支对应A=v的子集S_v
        b. 如果S_v为空,添加叶子节点标记为多数类
        c. 否则递归调用ID3(S_v, target, features-{A})
    6. 返回决策树

1.4 优缺点

优点

  • 计算复杂度低(O(n×d))
  • 生成的规则易于解释

缺点

  • 倾向选择取值多的特征
  • 无法处理连续特征
  • 无剪枝策略,容易过拟合

2. C4.5 算法(ID3的改进版)

2.1 核心改进

  • 处理连续特征:通过阈值划分
  • 缺失值处理:概率分布法
  • 剪枝策略:悲观错误剪枝(PEP)
  • 分裂标准:使用信息增益比

2.2 关键公式

分裂信息
S p l i t I n f o ( S , A ) = − ∑ v ∈ V a l u e s ( A ) ∣ S v ∣ ∣ S ∣ log ⁡ 2 ∣ S v ∣ ∣ S ∣ SplitInfo(S,A) = -\sum_{v \in Values(A)} \frac{|S_v|}{|S|} \log_2 \frac{|S_v|}{|S|} SplitInfo(S,A)=vValues(A)SSvlog2SSv

信息增益比
G a i n R a t i o ( S , A ) = I G ( S , A ) S p l i t I n f o ( S , A ) GainRatio(S,A) = \frac{IG(S,A)}{SplitInfo(S,A)} GainRatio(S,A)=SplitInfo(S,A)IG(S,A)

2.3 连续特征处理

排序连续值
计算相邻中点
作为候选阈值
选择最佳划分点

2.4 算法伪代码

def C4.5(data, target, features):
    1. 如果样本纯度高或特征不足,创建叶节点
    2. 对每个特征:
        a. 如果是离散特征:计算信息增益比
        b. 如果是连续特征:
           i. 排序并计算候选划分点
           ii. 选择最佳划分点
    3. 选择最优特征/划分点
    4. 递归构建子树
    5. 后剪枝(PEP)

2.5 优缺点

优点

  • 克服ID3偏向多值特征的问题
  • 支持连续特征和缺失值
  • 通过剪枝降低过拟合

缺点

  • 需要多次扫描和排序数据
  • 内存消耗较大

3. CART 算法(Classification and Regression Trees)

3.1 核心特性

  • 二叉树结构:每个节点仅有两个分支
  • 多功能性:支持分类和回归
  • 分裂标准
    • 分类:基尼指数
    • 回归:平方误差最小化

3.2 关键公式

基尼指数
G i n i ( S ) = 1 − ∑ i = 1 c p i 2 Gini(S) = 1 - \sum_{i=1}^c p_i^2 Gini(S)=1i=1cpi2

回归损失
M S E = 1 N ∑ ( y i − y ^ ) 2 MSE = \frac{1}{N} \sum (y_i - \hat{y})^2 MSE=N1(yiy^)2

3.3 算法流程

def CART(data, target, features):
    1. 对于每个特征A:
        a. 如果是分类特征:
           i. 计算所有可能二分划分
           ii. 选择基尼指数最小的划分
        b. 如果是连续特征:
           i. 排序后计算候选划分点
           ii. 选择最佳划分点
    2. 选择最优划分
    3. 递归构建左右子树
    4. 代价复杂度剪枝

3.4 剪枝策略

代价复杂度剪枝
R α ( T ) = R ( T ) + α ∣ T ∣ R_\alpha(T) = R(T) + \alpha|T| Rα(T)=R(T)+αT
其中:

  • R ( T ) R(T) R(T):误分类误差
  • ∣ T ∣ |T| T:叶节点数
  • α \alpha α:复杂度参数

3.5 优缺点

优点

  • 输出二叉树结构简单
  • 计算效率高于C4.5
  • 优秀的回归能力

缺点

  • 对类别不平衡敏感
  • 小变化可能导致结构剧变

4. 三种算法对比

特性ID3C4.5CART
发明时间198619931984
任务类型分类分类分类/回归
树结构多叉多叉二叉
分裂标准信息增益信息增益比基尼指数/MSE
连续特征不支持支持支持
缺失值不支持支持支持
剪枝悲观剪枝代价复杂度剪枝
计算效率
过拟合风险

5. 实际应用建议

  1. 选择场景

    • 小规模离散数据 → ID3
    • 需要处理连续特征 → C4.5
    • 需要回归或高效实现 → CART
  2. 参数调优

    # CART示例(sklearn)
    from sklearn.tree import DecisionTreeClassifier
    params = {
        'max_depth': [3,5,7],
        'min_samples_split': [2,5,10],
        'criterion': ['gini','entropy']
    }
    
  3. 可视化分析

    from sklearn.tree import plot_tree
    import matplotlib.pyplot as plt
    
    plt.figure(figsize=(20,10))
    plot_tree(model, feature_names=features, 
             class_names=target_names, filled=True)
    plt.show()
    
  4. 内存优化

    • 对于大数据集优先选择CART
    • 使用max_leaf_nodes参数控制复杂度

三种算法构成了决策树发展的主线,现代集成方法(如随机森林、GBDT)大多基于CART实现。理解它们的区别有助于在不同场景选择合适的树模型。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北辰alk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值