Week 8 和 Week 10 用同一个式子
Week 8 讲样条和 GAM 时,模型写成 f(x) = β0 + Σ βm·hm(x)。hm(x) 是分析者事先定好的基函数,比如 x²、x³,或者样条里只在节点 ξ 右侧起作用的 (x − ξ)₊³。这个式子对 x 是非线性的,对参数 β 仍然是线性的,所以 OLS、Ridge、Lasso 和交叉验证都能照用。
Week 10 的梯度提升写成 f(x) = β0 + Σ F(x; θm),结构和上面一样,每个 F 是一棵小决策树。区别在于这棵树用哪个特征分裂、切在哪里、叶子取什么值,都是从数据里学出来的,分析者不用事先猜哪些变换和交互重要。Week 8 的方法在特征多的时候只能靠可加假设避开维度灾难,GAM 因此抓不到交互;梯度提升拿树当基函数,交互可以在分裂里自己长出来。
Week 9 的随机森林不按这个式子组织。它的每一棵树都单独去近似整个关系,最后把几百棵树的预测取平均。随机森林和梯度提升都叫 ensemble,前者把很多个完整的预测取平均,后者把很多个局部的修正加起来。
随机森林加树,方差停在 ρσ²
Week 9 给出 B 棵树取平均以后的方差:
Var = ρσ² + (1 − ρ)σ² / B
σ² 是单棵树预测的方差,ρ 是两棵树预测之间的相关系数。B 只出现在 (1 − ρ)σ² / B 的分母里,树越多,这一项越接近 0;ρσ² 这一项和 B 无关,加多少棵树都留着。
取 B = 500 代进去(示例数值):
| ρ | ρσ² | (1 − ρ)σ² / B | 合计 |
|---|---|---|---|
| 0.9 | 0.9σ² | 0.0002σ² | 约 0.900σ² |
| 0.2 | 0.2σ² | 0.0016σ² | 约 0.202σ² |
两种情况下 (1 − ρ)σ² / B 都小到可以忽略,结果由 ρ 决定。ρ = 0.9 时,500 棵树平均下来的方差和单棵树差不多。
所以随机森林继续加树,只是让方差靠近 ρσ² 这个下限,偏差不变。测试误差随 B 单调下降,然后停在一个平台上,不会因为树多而过拟合。加树的代价只有计算时间,B 取 100 到 500 通常就够了。要把方差再往下压,得降低 ρ。随机森林在每次分裂时,只从随机抽出的 k 个特征里挑分裂变量,分类默认 k = ⌊√p⌋,回归默认 k = ⌊p/3⌋。这样几个强特征没法在每棵树的根节点都被选中,树和树长得不一样,ρ 就降下来了。k = p 时每次分裂都能用全部特征,就是 bagging。
梯度提升加树,验证误差会回升
梯度提升按顺序加树。用平方损失时,第 m 棵树拟合的是残差 r,也就是 y 减去前 m − 1 棵树加起来的预测,拟合好以后乘上学习率 η 加进模型。每加一棵,训练误差都会再降一点。前面的树把信号拿走以后,残差里剩下的越来越多是噪声,后面的树就在拟合噪声,验证误差先降后升,呈 U 形。






