[机器学习]CART决策树算法(介绍)

256 阅读5分钟

CART决策树算法详解

CART(Classification and Regression Trees,分类与回归树)是一种广泛应用于分类和回归任务的决策树算法。其核心思想是通过递归地将数据集划分为更纯净的子集,构建二叉树结构,最终生成易于解释的预测模型。以下是CART算法的详细解析:


1. 算法概述

  • 用途:支持分类(基尼指数)和回归(平方误差最小化)。

  • 树结构:二叉树(每个节点仅分裂为左右两个子节点)。

  • 核心特点

    • 分裂时对所有特征(离散或连续)进行二分。
    • 采用贪心算法选择局部最优分裂点。
    • 通过剪枝避免过拟合,提升泛化能力。

2. 分裂标准

分类问题:基尼指数(Gini Index)

基尼指数衡量数据的不纯度,值越小表示纯度越高。其公式为:

Gini(D)=1−∑i=1Cpi2Gini(D)=1−i=1∑C​pi2​

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

分裂步骤

  1. 对每个特征 AA 的所有可能二分方式进行枚举。

  2. 计算分裂后的加权基尼指数:

    Ginisplit=NleftNGini(Dleft)+NrightNGini(Dright)Ginisplit​=NNleft​​Gini(Dleft​)+NNright​​Gini(Dright​)

  3. 选择使 GinisplitGinisplit​ 最小的分裂方式。

回归问题:平方误差最小化

目标是最小化子节点的均方误差(MSE):

MSE=1N∑i=1N(yi−y^)2MSE=N1​i=1∑N​(yi​−y^​)2

其中 y^y^​ 为子节点样本的均值。分裂时选择使左右子节点MSE之和最小的切分点。


3. 处理不同类型特征

离散特征(分类特征)
  • 二分法:对 kk 个取值的离散特征,生成所有可能的非空真子集(共 2k−1−12k−1−1 种划分)。

    • 示例:特征“颜色”取值为{红, 蓝, 绿},可能的二分包括:

      • {红} vs {蓝, 绿}
      • {蓝} vs {红, 绿}
      • {绿} vs {红, 蓝}
  • 优化策略:当类别数较多时(如 k>10k>10),按目标变量排序后生成有序二分(类似连续特征处理)。

连续特征
  • 动态切分

    1. 对特征值排序,生成候选切分点(相邻不同类样本的中点)。
    2. 计算每个切分点的基尼指数或MSE,选择最优切分。
  • 示例:特征“年龄”值为[20, 25, 30, 35],候选切分点为22.5、27.5、32.5。


4. 缺失值处理

CART采用**代理分裂(Surrogate Splits)**处理缺失值:

  1. 训练阶段

    • 为每个分裂点选择多个替代分裂规则(按与主分裂规则的相关性排序)。
  2. 预测阶段

    • 若主分裂特征值缺失,使用代理分裂规则进行决策。

5. 停止条件与树生成

  • 停止分裂条件

    1. 节点样本数小于预设阈值(如5)。
    2. 节点纯度达到要求(基尼指数接近0或MSE足够小)。
    3. 所有特征已用完或无法进一步分裂。
  • 生成叶子节点

    • 分类任务:叶子节点为多数类。
    • 回归任务:叶子节点为样本均值。

6. 剪枝优化(Cost Complexity Pruning)

CART通过代价复杂度剪枝防止过拟合,步骤如下:

  1. 生成子树序列

    • 自底向上遍历树,逐步剪枝得到一系列子树 T0,T1,...,TkT0​,T1​,...,Tk​。
  2. 计算复杂度代价

    • 定义代价复杂度函数:

      Cα(T)=Error(T)+α⋅∣T∣Cα​(T)=Error(T)+α⋅∣T∣

      其中 αα 为复杂度参数,∣T∣∣T∣ 为叶子节点数。

  3. 交叉验证选择最优 αα

    • 通过验证集选择使预测误差最小的子树。

7. 算法流程

  1. 输入:训练集 DD,特征集 AA,停止条件参数。

  2. 递归建树

    • 若满足停止条件,生成叶子节点。
    • 否则,选择最优分裂特征和切分点,划分左右子集。
    • 对左右子集递归调用建树过程。
  3. 剪枝:生成子树序列并选择最优模型。


8. 优缺点分析

优点
  • 高效性:二叉树结构计算速度快。
  • 灵活性:支持分类和回归任务。
  • 鲁棒性:通过代理分裂处理缺失值,抗噪声能力强。
缺点
  • 局部最优性:贪心算法可能无法找到全局最优树。
  • 高方差:对训练数据敏感,需通过剪枝或集成(如随机森林)缓解。

9. 示例演示

分类任务:预测是否购买电脑(数据集简化)

年龄收入学生信用购买
≤30一般
≤30
31-40一般
>40一般

建树过程

  1. 计算各特征的基尼指数,选择最优分裂(如“年龄≤30”)。
  2. 对左右子节点递归分裂,直至满足停止条件。
  3. 剪枝后得到最终树。

10. CART vs C4.5对比

特性CARTC4.5
树结构二叉树多叉树
分裂标准基尼指数(分类)/ 均方差(回归)信息增益率
缺失值处理代理分裂概率分配
剪枝方法代价复杂度剪枝悲观剪枝
主要用途分类与回归分类

总结

CART算法以其简洁的二叉树结构、高效的二分分裂策略以及对分类和回归任务的支持,成为机器学习中的基础工具。

通过基尼指数或均方误差最小化选择分裂点,结合代价复杂度剪枝优化模型,CART在保持可解释性的同时具备较好的预测性能。

实际应用中,常通过集成方法(如随机森林、梯度提升树)进一步提升其表现。