共计 2222 个字符,预计需要花费 6 分钟才能阅读完成。
基本概念与地位
决策树是一种通过递归分割数据实现分类或回归的监督学习算法,其结构类似流程图,每个内部节点表示特征判断,分支表示判断结果,叶节点表示预测结果。CART(Classification and Regression Trees)是决策树的一种特殊实现,由 Breiman 等人于 1984 年提出,其核心特点是始终生成二叉树结构,既可处理分类问题也可处理回归问题。

这两种算法在机器学习中占据重要地位:
– 决策树因其直观易懂、无需特征缩放等特性,常作为基线模型
– CART 树因其高效的二分特性,成为 GBDT、随机森林等集成算法的基础组件
核心对比维度
1. 算法目标
- 传统决策树 :
- ID3 算法仅支持分类任务
- C4.5 算法通过扩展支持连续值处理,但仍以分类为主
- CART 树 :
- 同时支持分类(使用 Gini 系数)和回归(使用平方误差)
- 通过改变分裂准则即可切换任务类型
2. 节点分裂准则
- 决策树 :
- ID3 采用信息增益(易偏向多值特征)
- C4.5 采用信息增益比(解决 ID3 偏差)
- CART 树 :
- 分类任务:Gini 系数 $\text{Gini}(D) = 1 – \sum_{k=1}^K p_k^2$
- 回归任务:最小化平方误差 $\min_{j,s}\left[\min_{c_1}\sum_{x_i\in R_1(j,s)}(y_i – c_1)^2 + \min_{c_2}\sum_{x_i\in R_2(j,s)}(y_i – c_2)^2\right]$
3. 树结构差异
- 决策树 :
- 多叉树结构(特征有多少取值就分多少叉)
- 需要额外处理连续特征离散化
- CART 树 :
- 强制二叉树结构(即使类别超过两种)
- 自动处理连续特征(通过寻找最佳分割点)
4. 计算复杂度
假设有 n 个样本,m 个特征,树深度为 d:
– 决策树 :
– 预处理阶段需对连续特征离散化(额外开销)
– 多叉树导致内存消耗更大
– CART 树 :
– 二叉树结构降低空间复杂度
– 最佳分割点查找需要排序(平均 O(nlogn))
代码实战演示
决策树分类示例
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3)
# 构建模型(使用信息熵准则)clf = DecisionTreeClassifier(criterion='entropy', max_depth=3)
clf.fit(X_train, y_train)
# 特征重要性可视化
plt.barh(range(4), clf.feature_importances_, tick_label=iris.feature_names)
plt.title('Feature Importance')
plt.show()
CART 回归示例
from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import fetch_california_housing
import numpy as np
# 加载数据
housing = fetch_california_housing()
X, y = housing.data, housing.target
# 构建回归树
reg = DecisionTreeRegressor(max_depth=4, min_samples_leaf=10)
reg.fit(X, y)
# 评估节点分裂效果
print('MSE:', np.mean((reg.predict(X) - y)**2))
性能考量与优化
1. 训练速度对比
- 在小数据集上差异不明显
- 当特征维度 >100 时,CART 的二叉树特性使其更快
2. 过拟合处理
通用策略:
– 预剪枝(更推荐):
– 限制 max_depth
– 设置 min_samples_split
– 控制 min_impurity_decrease
– 后剪枝:
– CCP(Cost Complexity Pruning)
– 需使用决策树的可剪枝实现
3. 特征缩放敏感性
- 两种算法都不需要特征缩放(基于阈值判断)
- 但归一化能提升可视化效果(尤其回归任务)
最佳实践指南
选择标准
优先使用 CART 树当:
– 需要统一处理分类和回归任务
– 特征包含大量连续值
– 后续计划构建集成模型
选择传统决策树当:
– 业务需要高度可解释的规则
– 类别型特征占主导
超参数调优
关键参数优先级:
1. max_depth(3-10)
2. min_samples_leaf(1-20)
3. min_impurity_decrease(0-0.1)
类别不平衡处理
- 设置 class_weight=’balanced’
- 对少数类样本进行上采样
- 使用 F1-score 作为评估指标
开放性问题
- 如何处理高维稀疏特征(如文本特征)下的 CART 树训练?
- 在实时推荐系统中,如何平衡 CART 树的预测速度和更新频率?
- 当存在大量缺失值时,两种算法各有哪些填充策略更有效?
总结建议
实际项目中建议:
– 先用 CART 树快速验证特征有效性
– 通过限制树深度控制过拟合
– 特征重要性分析建议结合 Permutation Importance
– 最终部署时考虑使用剪枝后的模型
