CART决策树算法详解
CART(Classification and Regression Trees,分类与回归树)是一种广泛应用于分类和回归任务的决策树算法。其核心思想是通过递归地将数据集划分为更纯净的子集,构建二叉树结构,最终生成易于解释的预测模型。以下是CART算法的详细解析:
1. 算法概述
-
用途:支持分类(基尼指数)和回归(平方误差最小化)。
-
树结构:二叉树(每个节点仅分裂为左右两个子节点)。
-
核心特点:
- 分裂时对所有特征(离散或连续)进行二分。
- 采用贪心算法选择局部最优分裂点。
- 通过剪枝避免过拟合,提升泛化能力。
2. 分裂标准
分类问题:基尼指数(Gini Index)
基尼指数衡量数据的不纯度,值越小表示纯度越高。其公式为:
Gini(D)=1−∑i=1Cpi2Gini(D)=1−i=1∑Cpi2
其中 CC 为类别数,pipi 为第 ii 类的样本比例。
分裂步骤:
-
对每个特征 AA 的所有可能二分方式进行枚举。
-
计算分裂后的加权基尼指数:
Ginisplit=NleftNGini(Dleft)+NrightNGini(Dright)Ginisplit=NNleftGini(Dleft)+NNrightGini(Dright)
-
选择使 GinisplitGinisplit 最小的分裂方式。
回归问题:平方误差最小化
目标是最小化子节点的均方误差(MSE):
MSE=1N∑i=1N(yi−y^)2MSE=N1i=1∑N(yi−y^)2
其中 y^y^ 为子节点样本的均值。分裂时选择使左右子节点MSE之和最小的切分点。
3. 处理不同类型特征
离散特征(分类特征)
-
二分法:对 kk 个取值的离散特征,生成所有可能的非空真子集(共 2k−1−12k−1−1 种划分)。
-
示例:特征“颜色”取值为{红, 蓝, 绿},可能的二分包括:
- {红} vs {蓝, 绿}
- {蓝} vs {红, 绿}
- {绿} vs {红, 蓝}
-
-
优化策略:当类别数较多时(如 k>10k>10),按目标变量排序后生成有序二分(类似连续特征处理)。
连续特征
-
动态切分:
- 对特征值排序,生成候选切分点(相邻不同类样本的中点)。
- 计算每个切分点的基尼指数或MSE,选择最优切分。
-
示例:特征“年龄”值为[20, 25, 30, 35],候选切分点为22.5、27.5、32.5。
4. 缺失值处理
CART采用**代理分裂(Surrogate Splits)**处理缺失值:
-
训练阶段:
- 为每个分裂点选择多个替代分裂规则(按与主分裂规则的相关性排序)。
-
预测阶段:
- 若主分裂特征值缺失,使用代理分裂规则进行决策。
5. 停止条件与树生成
-
停止分裂条件:
- 节点样本数小于预设阈值(如5)。
- 节点纯度达到要求(基尼指数接近0或MSE足够小)。
- 所有特征已用完或无法进一步分裂。
-
生成叶子节点:
- 分类任务:叶子节点为多数类。
- 回归任务:叶子节点为样本均值。
6. 剪枝优化(Cost Complexity Pruning)
CART通过代价复杂度剪枝防止过拟合,步骤如下:
-
生成子树序列:
- 自底向上遍历树,逐步剪枝得到一系列子树 T0,T1,...,TkT0,T1,...,Tk。
-
计算复杂度代价:
-
定义代价复杂度函数:
Cα(T)=Error(T)+α⋅∣T∣Cα(T)=Error(T)+α⋅∣T∣
其中 αα 为复杂度参数,∣T∣∣T∣ 为叶子节点数。
-
-
交叉验证选择最优 αα:
- 通过验证集选择使预测误差最小的子树。
7. 算法流程
-
输入:训练集 DD,特征集 AA,停止条件参数。
-
递归建树:
- 若满足停止条件,生成叶子节点。
- 否则,选择最优分裂特征和切分点,划分左右子集。
- 对左右子集递归调用建树过程。
-
剪枝:生成子树序列并选择最优模型。
8. 优缺点分析
优点
- 高效性:二叉树结构计算速度快。
- 灵活性:支持分类和回归任务。
- 鲁棒性:通过代理分裂处理缺失值,抗噪声能力强。
缺点
- 局部最优性:贪心算法可能无法找到全局最优树。
- 高方差:对训练数据敏感,需通过剪枝或集成(如随机森林)缓解。
9. 示例演示
分类任务:预测是否购买电脑(数据集简化)
| 年龄 | 收入 | 学生 | 信用 | 购买 |
|---|---|---|---|---|
| ≤30 | 高 | 否 | 一般 | 否 |
| ≤30 | 高 | 否 | 优 | 否 |
| 31-40 | 高 | 否 | 一般 | 是 |
| >40 | 中 | 否 | 一般 | 是 |
建树过程:
- 计算各特征的基尼指数,选择最优分裂(如“年龄≤30”)。
- 对左右子节点递归分裂,直至满足停止条件。
- 剪枝后得到最终树。
10. CART vs C4.5对比
| 特性 | CART | C4.5 |
|---|---|---|
| 树结构 | 二叉树 | 多叉树 |
| 分裂标准 | 基尼指数(分类)/ 均方差(回归) | 信息增益率 |
| 缺失值处理 | 代理分裂 | 概率分配 |
| 剪枝方法 | 代价复杂度剪枝 | 悲观剪枝 |
| 主要用途 | 分类与回归 | 分类 |
总结
CART算法以其简洁的二叉树结构、高效的二分分裂策略以及对分类和回归任务的支持,成为机器学习中的基础工具。
通过基尼指数或均方误差最小化选择分裂点,结合代价复杂度剪枝优化模型,CART在保持可解释性的同时具备较好的预测性能。
实际应用中,常通过集成方法(如随机森林、梯度提升树)进一步提升其表现。