回归树是怎么工作的?和分类树有什么区别?
简化版
回归树 用决策树来预测连续值(如房价)。和分类树的区别主要在两点:① 分裂标准——分类树用信息增益/基尼衡量「纯度」,回归树用平方误差(方差) 衡量「离散程度」,每次选让子集内平方误差和最小的分裂(即让每个子集的目标值尽量集中);② 叶子输出——分类树叶子输出类别(多数投票),回归树叶子输出该叶子内所有样本目标值的均值。构建同样是贪心递归二分(CART 回归树)。它把特征空间切成若干矩形区域,每个区域用一个常数(均值)预测——所以回归树的预测是分段常数、阶梯状的。
详细版
分类树 vs 回归树:
| 维度 | 分类树 | 回归树 |
|---|---|---|
| 预测目标 | 离散类别 | 连续数值 |
| 分裂标准 | 信息增益/增益比/基尼 | 平方误差(方差)最小 |
| 叶子输出 | 该叶子多数类 | 该叶子样本目标均值 |
| 预测形态 | 类别 | 分段常数(阶梯) |
回归树分裂准则:
对特征 j 和阈值 s,把样本分成 R₁(≤s)、R₂(>s),
选让下式最小的 (j, s):
Σ_{i∈R₁}(yᵢ - c₁)² + Σ_{i∈R₂}(yᵢ - c₂)²
其中 c₁ = R₁ 中 y 的均值,c₂ = R₂ 中 y 的均值
- 每个叶子的预测值 = 落入该叶子的样本目标均值(使平方误差最小的常数就是均值)。
预测:样本从根走到某叶子,输出该叶子的均值。整体是把输入空间划分成矩形区域、每区域一个常数。
完整版教学
一、回归树要解决什么
分类树输出类别,但很多任务要预测连续数值(房价、销量、温度)。回归树就是把决策树的框架用到回归上——同样递归地把特征空间切分成小区域,只不过每个区域给出的不是类别,而是一个数值。
它继承了决策树的所有优点(可解释、不需缩放、能处理非线性和交互),也继承了缺点(易过拟合、高方差),只是「衡量分裂好坏」和「叶子输出」这两处换成了适合回归的形式。CART 的回归版本就是标准回归树。
二、核心区别一:用平方误差代替纯度
分类树用「纯度」(基尼、熵)衡量分裂好坏——同类样本聚在一起就好。回归里没有「类别」,无从谈纯度,改用目标值的离散程度:一个子集里样本的 y 值越集中(方差越小),说明用一个常数预测它们的误差越小,这个子集就越「好」。
于是回归树的分裂准则是最小化平方误差(等价于最小化方差)。对候选的 (特征 j, 阈值 s),把样本分成 R₁、R₂ 两组,计算:
误差(j, s) = Σ_{i∈R₁}(yᵢ - c₁)² + Σ_{i∈R₂}(yᵢ - c₂)²
其中 c₁、c₂ 分别是两组 y 的均值。遍历所有特征和阈值,选让这个总平方误差最小的分裂。 直觉:好的分裂能把 y 值相近的样本聚到一组,让每组用均值预测时误差最小。
三、核心区别二:叶子输出均值
分类树叶子输出「该叶子里最多的类别」。回归树叶子输出该叶子里所有样本目标值的均值。
为什么是均值?因为在平方误差准则下,用一个常数 c 去预测一组数 yᵢ,使 Σ(yᵢ-c)² 最小的 c 恰好就是它们的均值(这是均值的定义性质)。所以每个叶子用「样本均值」预测是平方误差意义下的最优常数。
(如果改用绝对误差准则,则叶子最优输出变成中位数——这也是为什么中位数对离群点更稳健。)
四、预测形态:分段常数、阶梯状
回归树把整个特征空间切成若干个互不重叠的矩形区域(每个叶子对应一个区域),每个区域内预测一个固定常数(均值)。所以回归树的预测函数是分段常数的:
预测值
│ ┌────
│ ┌────┘
│───┘
└──────────────→ 特征
每段是一个常数(叶子均值),整体呈阶梯状
这带来一个重要特性:回归树不能外推、预测是阶梯而非平滑曲线。它无法预测超出训练数据范围的趋势(如线性上升),只能给出训练时见过区域的均值。这是回归树相比线性回归的一个局限。
五、构建流程和防过拟合
构建流程和分类树一样——贪心 + 递归二分:
1. 遍历所有特征和阈值,选平方误差下降最多的分裂
2. 按最优分裂二分样本
3. 对每个子集递归,直到满足停止条件(深度、样本数、误差下降阈值等)
4. 每个叶子记录样本均值作为预测值
同样容易过拟合:分得太细,每个叶子几个样本,均值就拟合了噪声。防止手段和分类树一致——剪枝、限制深度/叶子样本数、集成。回归树的集成尤其重要:GBDT、XGBoost 的基学习器就是回归树(即使做分类,GBDT 也是用回归树拟合梯度/残差),随机森林回归也是多棵回归树平均。
六、常见追问
- 回归树叶子为什么输出均值? 因为平方误差下,最优常数预测就是均值;换绝对误差则是中位数。
- 回归树能预测训练范围外的值吗? 不能——输出是叶子均值,是分段常数,无法外推趋势。
- 回归树 vs 线性回归? 线性回归假设全局线性、能外推、平滑;回归树无需线性假设、能自动捕捉非线性和交互,但输出是阶梯、不能外推、易过拟合。
- GBDT 做分类为什么也用回归树? 因为 GBDT 每轮拟合的是损失的负梯度(连续值),需要回归树来拟合这些连续目标(详见 GBDT 专题)。
- 分裂标准还有别的吗? 常用平方误差(MSE),也有绝对误差(MAE,更抗离群但慢)、Friedman MSE 等变体。
七、手算一次平方误差最优切分
四个按 x 排序的目标值为 [2, 4, 10, 12]。不分裂时均值 7,SSE 为 25+9+9+25=68;在中间切开后,左叶均值 3、右叶均值 11,两边 SSE 各为 2,总计 4,误差下降 64。因此树会偏好这个阈值,叶子预测分别是 3 和 11。
leaf_value = mean(y in leaf)
SSE(leaf) = sum_i (y_i - leaf_value)^2
split_gain = SSE(parent) - SSE(left) - SSE(right)
| 对象/方案 | 核心机制 | 选择或风险 |
|---|---|---|
| 分类树 | Gini/熵等分类不纯度 | 类别分布或多数类 |
| 平方损失回归树 | 叶内 SSE/方差 | 均值 |
| 绝对损失回归树 | 叶内绝对偏差 | 中位数 |
枚举特征阈值 → 计算左右叶最优常数 → 比较总损失
→ 递归切分 → 叶子输出
记忆钩子:“回归树输出均值”不是人为规定,而是平方损失下让叶内误差最小的一阶条件。
八、常见误区与追问
- 误区:回归树的叶子一定输出均值。 输出统计量取决于损失,绝对误差下中位数更自然。
- 误区:回归树能像线性回归一样自然外推。 超出训练范围仍落到既有叶子,通常不能延伸趋势。
- 追问:为什么预测呈阶梯状? 每个叶区域输出一个常数,跨阈值才跳到另一个常数。
- 追问:分类 GBDT 为什么也用回归树? 基树拟合的是连续的负梯度或牛顿步,而非直接投票类别。
- 追问:如何防止叶均值被少量样本带偏? 提高最小叶样本、使用稳健损失或集成,并检查异常标签。
九、加强记忆
回归树用决策树预测连续值,与分类树两点不同:① 分裂标准——不用纯度(基尼/熵),改用平方误差(方差)最小,即选让两个子集 Σ(yᵢ-c)² 之和最小的分裂,把 y 相近的样本聚到一组;② 叶子输出——不是多数类,而是叶子内样本目标值的均值(因为平方误差下最优常数就是均值;换绝对误差则是中位数)。构建同样是贪心递归二分,把特征空间切成矩形区域、每区域输出一个常数,所以预测是分段常数、阶梯状、不能外推。同样易过拟合,靠剪枝/限制复杂度/集成防止;GBDT、XGBoost 的基学习器正是回归树(做分类也用回归树拟合梯度)。