第1章 残差的起点:从预测误差到Boosting 本章跟着一条线走:一套房子的预测误差,如何一步步演变成一个算法家族的学习目标。 我们从"模型预测错了多少"这个最原始的问题出发,沿着"误差 → 残差 → 集成 → Boosting → XGBoost"的路线,把 XGBoost 出现之前的整条因果链讲清楚。 一条主线 假设你要预测房价。第一版模型用面积估了个数,误差很大;你注意到误差本身有规律——朝南的房子被低估了,顶楼的被高估了。于是你训练第二个模型去专门拟合这些误差,再把两个模型的输出相加。误差变小了,但还没消失,那就再来第三个。这就是梯度提升的全部直觉:上一轮没消除的误差,就是这一轮的学习目标。这条"修正—再修正"的循环,就是贯穿全教程的残差收敛之路。
本章跟着一条线走:一套房子的预测误差,如何一步步演变成一个算法家族的学习目标。 我们从"模型预测错了多少"这个最原始的问题出发,沿着"误差 → 残差 → 集成 → Boosting → XGBoost"的路线,把 XGBoost 出现之前的整条因果链讲清楚。
假设你要预测房价。第一版模型用面积估了个数,误差很大;你注意到误差本身有规律——朝南的房子被低估了,顶楼的被高估了。于是你训练第二个模型去专门拟合这些误差,再把两个模型的输出相加。误差变小了,但还没消失,那就再来第三个。这就是梯度提升的全部直觉:上一轮没消除的误差,就是这一轮的学习目标。这条"修正—再修正"的循环,就是贯穿全教程的残差收敛之路。本章三节就是这条主线的三个里程碑:先认识误差与残差(第 1 节),再看把多个模型加起来的两条路线(第 2 节),最后沿 Boosting 家族走到 XGBoost 登场(第 3 节)。
第 1 节把"残差"这个概念落到可计算的层面:一个模型有多错、错在哪里、错误的分布本身携带什么信息。第 2 节回答"为什么要把多个模型组织起来":Bagging 用平均换稳定,Boosting 用串行换精度,两者对偏差和方差的作用方向完全不同,这一对比是理解一切提升类算法的地基。第 3 节把时间线拉长:AdaBoost 用样本权重实现"聚焦错例",GBDT 把"拟合什么"推广为负梯度,XGBoost 再补上正则化与二阶信息——每一代都在回答上一代留下的悬而未决的问题。
阅读本章不需要任何集成学习基础,但建议先具备两样东西:能用 Python 写一个简单的线性回归(第 1 节的实验就是从这种水平起步的),以及知道"训练集、测试集"这两个词的含义。数学上只用到相关系数和最小二乘,代码里都有现成函数。如果读者已经能独立解释偏差与方差,第 1 节可以快速扫过,直接从第 2 节的对比实验切入。
本章最重要的认知转折在第 2 节:集成不是"多个模型投票"这么简单,并联与串联、平均与累加,会产生完全不同的偏差—方差结构。很多初学者背了"随机森林好还是 XGBoost 好",却不知道这个问题的答案就藏在两条路线的结构差异里。读完本章你会得到一个清晰的因果链:残差可学习 → 残差可以被树拟合 → 树可以一棵接一棵地补 → 补的过程需要控制复杂度 → 于是需要 XGBoost。
主线推进到 XGBoost 门口:我们知道了一轮轮补残差的框架,但还没回答"每一轮怎么判断该补多少、什么时候停"。这正是第 2 章目标函数要解决的问题——把直觉变成一个可以求导、可以加正则项、可以闭式求解的目标函数。带着"如何量化地控制每一次修正"这个问题进入第 2 章。