Ch04 机器学习修订于 二〇二六年七月六日
深挖-决策树
一句话理解
决策树是一种通过递归地将数据按特征值分裂成子集来构建的树形模型,每个内部节点代表一个特征上的判断(if-then 规则),每条从根到叶的路径就是一条分类规则。它就像玩”20 个问题”游戏,通过一系列精心设计的是/否问题来锁定答案。
零基础理解
想象你去医院看病,医生问诊的流程:
- 医生先问:“发烧了吗?“——发烧的话走左边,不发烧走右边。
- 如果发烧,再问:“白细胞高吗?“——高的话可能是细菌感染,不高可能是病毒感染。
- 如果不发烧,继续问:“咳嗽吗?“——以此类推。
医生在每一步都会选择最能区分病因的问题来问,而不是随便问。决策树的学习过程就是:自动找出那些”最有区分力”的问题(特征),并决定在什么阈值上分叉。
核心概念
1. 分裂标准(Splitting Criteria)
决策树在每个节点需要选择一个”最优”特征和阈值来分裂数据。不同的算法使用不同的分裂指标:
分类树
| 指标 | 公式(简化) | 特点 | 使用算法 |
|---|---|---|---|
| 信息增益 (Information Gain) | $IG = H(D) - \sum_{v} \frac{ | D_v | }{ |
| 信息增益率 (Gain Ratio) | $GR = \frac{IG}{-\sum_v \frac{ | D_v | }{ |
| 基尼系数 (Gini Index) | 计算更快,不需要对数运算 | CART |
其中 是熵(Entropy),衡量不纯度; 是第 类的比例。
回归树
回归树使用 MSE(Mean Squared Error) 或 MAE 作为分裂标准:
选择使得分裂后两个子节点 MSE 加权和最小的特征和阈值。
2. 剪枝(Pruning)
不剪枝的决策树会一直分裂直到每个叶子节点都是纯的,导致严重过拟合。剪枝是控制复杂度的关键手段。
预剪枝 vs 后剪枝对比
| 维度 | 预剪枝 (Pre-pruning) | 后剪枝 (Post-pruning) |
|---|---|---|
| 时机 | 在树生长过程中提前停止 | 先生成完整树,再自底向上剪枝 |
| 停止条件 | 达到最大深度 / 最小样本数 / 最小信息增益阈值 | 用验证集评估剪掉某个子树是否能提升性能 |
| 优点 | 训练快,防止过拟合出现在训练阶段 | 不会遗漏交互效应,通常比预剪枝效果更好 |
| 缺点 | 可能过早停止(欠拟合风险),难以设定合适的阈值 | 训练开销大,需要先生成完整树再修剪 |
| 实现 | max_depth, min_samples_split, min_samples_leaf | 代价复杂度剪枝(CCP),ccp_alpha 参数 |
实际调参建议
- 先设
max_depth:从 3 开始,逐步增加到验证集性能不再提升。 - 再调
min_samples_leaf:增大这个值会强制叶子节点有更多样本,抑制过拟合。建议从 1 到 50 搜索。 - 最后考虑 CCP:用
cost_complexity_pruning_path找到最优的ccp_alpha。
3. 特征重要性(Feature Importance)
决策树天然提供特征重要性度量,这是它相对于黑盒模型的重要优势。计算方法:
- 基于基尼重要性:某个特征在所有分裂中减少的基尼不纯度总和,按分裂样本数加权。
- 基于分裂次数:某个特征在树中被用作分裂节点的次数。
- 基于排列重要性:随机打乱某个特征的值,观察模型性能下降多少(模型无关方法)。
注意:基于不纯度的重要性对高基数特征(cardinality 高的特征,如 ID 列)有偏,会高估其重要性。排列重要性更可靠但计算开销大。
从决策树到集成学习
单棵决策树容易过拟合,但其”高方差”特性恰好适合做集成。集成学习是决策树思想最重要的延伸。
集成方法演进路线
| 方法 | 年份 | 核心思想 | 代表实现 | 2026 年地位 |
|---|---|---|---|---|
| Bagging | 1996 | 并行训练多棵树,用 Bootstrap 采样 + 投票/平均 | 随机森林 (Breiman 2001) | 快速 Baseline,高维数据适用 |
| Boosting | 1997 | 串行训练,每棵树修正前一棵的错误 | AdaBoost, GBDT | 思想基础,具体实现已演进 |
| 梯度提升 | 1999 | 用梯度下降的思想来提升,每棵树拟合残差 | GBDT | 核心范式,催生了后续所有变体 |
| 正则化提升 | 2016-2017 | 在 GBDT 基础上加入正则化、列采样、直方图加速 | XGBoost, LightGBM, CatBoost | 表格数据任务的王者 |
2026 年核心集成模型
- XGBoost:表格数据的”默认选择”,正则化好、GPU 加速成熟、社区生态最完善。
- LightGBM:基于直方图的算法,训练速度极快,适合大规模数据和在线学习。
- CatBoost:对类别特征有原生支持,不需要手动编码,默认超参数使用效果就很不错。
- 随机森林:不需要太多调参就能获得不错效果,适合做快速 baseline 和特征选择。
优缺点
优点
- 可解释性极强:可以可视化整棵树,输出规则,向非技术人员解释模型决策。
- 几乎不需要数据预处理:不需要特征缩放(归一化/标准化),能处理缺失值,天然支持混合类型特征。
- 特征重要性输出:可以用于特征选择和探索性数据分析。
- 计算效率高:预测时间复杂度 ,适合低延迟场景。
缺点
- 容易过拟合:单棵树如果不剪枝,几乎可以完美拟合训练数据(泛化能力差)。
- 不稳定:数据的微小变化可能导致完全不同的树结构(高方差)。
- 对线性关系不擅长:如果真实决策边界是线性的,决策树需要用很多阶梯来近似,效率低。
- 偏向多值特征:信息增益和基尼系数天然偏好取值较多的特征。
- 外推能力差:对训练数据范围外的输入,预测值只能是叶子节点的均值/众数。
2026 年定位
- 表格数据之王:通过 XGBoost / LightGBM / CatBoost,决策树系模型在结构化数据(表格数据)上仍然是最强的方案,深度学习在表格数据上尚未形成压倒性优势。
- 可解释性刚需:在金融风控、医疗诊断等需要可解释性的场景,决策树是首选。
- 特征工程工具:用单棵决策树或随机森林做特征重要性分析,指导后续建模。
- AutoML 核心组件:大多数 AutoML 框架(AutoGluon、H2O、FLAML)的核心搜索空间都围绕 GBDT 系列构建。
2026 年的建议:拿到表格数据,先用 XGBoost 跑一个 baseline,再用随机森林看特征重要性,然后决定是否需要深度学习。
决策树 vs SVM vs KNN 对比
| 维度 | 决策树 | SVM | KNN |
|---|---|---|---|
| 决策边界 | 轴平行的阶梯状 | 平滑曲线(核 SVM) | 复杂的 Voronoi 图 |
| 特征缩放 | 不需要 | 必须 | 必须 |
| 缺失值 | 天然处理 | 需要预处理 | 需要预处理 |
| 可解释性 | 极高 | 低 | 低 |
| 训练速度 | 快 | 慢(大样本) | 零(惰性学习) |
| 预测速度 | 快 | 快 | 慢 |
| 非线性 | 天然支持 | 核方法 | 天然支持 |
| 过拟合风险 | 高(需剪枝) | 低(间隔保证) | 中(取决于 K) |
| 概率输出 | 天然支持 | 需校准 | 天然支持 |
相关笔记
- KNN(K 近邻) —— 另一种基于样本的算法,与决策树在可解释性和计算特性上互补
- 深挖-SVM —— 基于间隔的分类器,小样本场景下与决策树各有优劣
- 概念-随机森林 —— 决策树 + Bagging,降低方差的首选集成方法
- 概念-XGBoost —— 梯度提升树的最流行实现,表格数据的霸主
- 第4章 · 机器学习核心算法 —— 决策树的数学推导与 ID3/C4.5/CART 算法详解
- 过拟合 (Overfitting) —— 理解决策树过拟合的本质及剪枝的数学原理
- 概念-特征工程 —— 利用决策树的特征重要性指导特征选择
来源
- Quinlan, J. R. (1986). Induction of decision trees. Machine Learning, 1(1), 81-106.
- Breiman, L. (2001). Random forests. Machine Learning, 45(1), 5-32.
- Chen, T., & Guestrin, C. (2016). XGBoost: A scalable tree boosting system. KDD 2016. https://arxiv.org/abs/1603.02754
- scikit-learn Decision Tree 官方文档: https://scikit-learn.org/stable/modules/tree.html
- 周志华《机器学习》第 4 章 决策树
- Friedman, J. H. (2001). Greedy function approximation: A gradient boosting machine. Annals of Statistics, 29(5), 1189-1232.