数学原理
本章目标
- 理解决策树回归的数学本质——递归二分特征空间,每次选择使平方误差最小的特征和阈值。
- 理解叶子节点为什么输出局部常数(区域均值)——这是平方误差最小化的自然结果。
- 把这些数学表达和当前源码中的
max_depth、min_samples_split、min_samples_leaf对应起来。
重点方法与概念速览
| 名称 | 类型 | 作用 |
|---|---|---|
| 区域划分 | 数学过程 | 将特征空间递归二分为若干矩形子区域 |
| 平方误差最小化 | 分割准则 | |
| 局部常数预测 | 叶子输出 | $\hat{c}_m = \frac{1}{ |
| 复杂度控制 | 正则化 | max_depth、min_samples_split、min_samples_leaf——防止树过深、区域过细 |
1. 区域划分的数学形式
决策树回归将特征空间划分为
其中
对于特征
划分过程是递归的——对
理解重点
- 决策树的每一步分裂都是轴对齐(axis-aligned)的——每次只用一个特征的一个阈值切一刀。
- 这意味着决策边界总是由垂直于坐标轴的超平面组成——不能直接产生斜线分割。
- 数学上的区域划分,在工程上对应树的节点不断生成左右子节点——直到触及
max_depth或min_samples_split等约束。
2. 分割准则:平方误差最小化
回归树的核心目标是最小化每个区域内的平方误差和。在第
其中:
理解重点
- 回归树的分裂准则与分类树有本质区别——分类树用基尼系数或信息增益(衡量类别纯度),回归树用平方误差(衡量数值离散度)。
- 每次分裂的目标是让左右两边的目标值各自更"集中"——也就是让区域内方差尽可能小。
- 这也解释了为什么叶子节点预测值自然取区域均值——对于平方损失,均值是最优的常数预测。
3. 叶子节点预测值:局部常数
一旦样本落入某个叶子节点(区域
整个模型的预测函数因此呈现分段常数形态:
理解重点
- 决策树回归不是在拟合一条连续曲线——它在每个叶子区域输出一个常数,整体预测函数是阶梯状的。
- 与线性回归的对比:线性回归对任意
输出 (全局连续函数),决策树回归输出不同区域的局部均值(分段常数)。 - 树越深、叶子越多,分段越细——模型越灵活但也越容易过拟合。
4. 训练复杂度与搜索策略
对每个特征
其中
每层分裂后样本被二分,递归深度受 max_depth 限制,总复杂度约为
理解重点
- 回归树的训练不是遍历所有可能的分裂组合——而是对每个特征单独排序、单独搜索最优阈值,再选全局最优。
- California Housing 有 20640 样本 × 8 特征——在此规模上决策树训练极快(秒级),这也是树模型的一大工程优势。
- 当前源码中同时使用
@timeit和timer打印耗时——对于这个数据规模,训练耗时通常在毫秒到秒级。
5. 复杂度控制与正则化
不加约束的决策树会一直分裂到每个叶子只有 1 个样本——完美拟合训练数据但毫无泛化能力。当前源码通过三个超参数约束树的生长:
| 约束项 | 数学含义 | 当前取值 |
|---|---|---|
max_depth | 树的最大深度——限制从根到叶子的最长路径长度 | 6 |
min_samples_split | 节点继续分裂所需的最小样本数——若当前节点样本数小于此值,停止分裂 | 6 |
min_samples_leaf | 叶子节点允许的最少样本数——分裂后任一子节点样本数少于此值则拒绝该分裂 | 3 |
此外,理论上还有代价复杂度剪枝(cost-complexity pruning):
其中 ccp_alpha——复杂度控制完全通过上述三个超参数。
理解重点
- 三个超参数从不同角度阻止树的过度生长:
max_depth限制深度上限,min_samples_split限制何时还能切,min_samples_leaf限制叶子不能太小。 - 当前默认值
(6, 6, 3)是中等保守的配置——在 California Housing 上既有足够的非线性拟合能力,又不过度分裂。 - 理论上常见的
ccp_alpha剪枝在 scikit-learn 中可用但当前未启用——文档必须区分"理论上常见的控制方式"和"当前实现实际使用了什么"。
6. 数学原理如何映射到当前源码
| 数学概念 | 数学符号 | 代码实现 |
|---|---|---|
| 区域划分 | DecisionTreeRegressor 内部节点分裂——max_depth=6 限制层数 | |
| 分割准则 | criterion="squared_error"(默认,源码未显式写出) | |
| 叶子预测值 | model.predict(X) 返回各叶子区域均值 | |
| 特征搜索 | 对每个 | scikit-learn 内部 Cython 实现——random_state=42 保证可复现 |
| 最大深度 | max_depth=6 | |
| 最小分裂样本数 | min_samples_split=6 | |
| 最小叶子样本数 | min_samples_leaf=3 | |
| 叶节点数 | $ | T |
| 树深度 | model.get_depth() | |
| 特征重要性 | model.feature_importances_ |
7. 决策树回归 vs 线性回归 数学对比
| 维度 | 线性回归 | 决策树回归 |
|---|---|---|
| 模型形式 | ||
| 目标函数 | ||
| 假设 | 全局线性关系 | 无条件分布假设 |
| 特征交互 | 需手工构造交互项 | 自然通过条件分支捕获 |
| 非线性处理 | 需基函数展开或特征工程 | 天然支持——分裂即是非线性 |
| 参数数 | 随树深度指数增长——叶子数 | |
| 过拟合风险 | 低(参数少) | 高(需显式约束深度和叶子大小) |
| 对特征尺度敏感 | 是——需标准化 | 否——仅依赖相对排序 |
常见坑
- 把回归树的分裂准则与分类树混淆——回归用平方误差(MSE),分类用基尼系数或熵。
- 以为树越深越好——未约束的树会在训练集上完美拟合但泛化极差。
- 把叶子预测值理解为"该区域的线性拟合"——决策树回归输出的是常数(均值),不是局部线性函数。
- 忽略
min_samples_split和min_samples_leaf的联合作用——只看max_depth不足以控制复杂度。
小结
- 决策树回归的数学核心链:递归二分特征空间 → 平方误差最小化选择
→ 叶子输出区域均值 → max_depth/min_samples_split/min_samples_leaf控制复杂度。 - 与线性回归的根本区别:分段常数 vs 全局线性,无条件假设 vs 线性假设,天然处理非线性 vs 需特征工程。
- 当前源码
DecisionTreeRegressor(max_depth=6, min_samples_split=6, min_samples_leaf=3)是展示回归树核心数学最经典的中等复杂度配置。