9.1 线性回归的直觉与假设
第 8 章建立了机器学习的安全护栏:预测契约、预测时刻合法的特征、模拟部署的数据划分,以及只在训练折内拟合的 Pipeline。现在可以在不拆掉护栏的前提下研究具体模型。本章沿用一个契约:为每笔刚派单的订单预测配送分钟数。目标是连续数值,因此这是回归问题。
把普通最小二乘看成几何搜索
先从图形基线开始。横轴放路线距离,纵轴放配送时长,每个点代表一笔训练订单。单特征线性模型会画出一条线:
其中 是订单 的预测时长, 是截距, 是斜率。如果 的单位是公里, 的单位是分钟,斜率单位就是分钟/公里。截距是 时的预测;即使这个输入在业务上没有实际意义,截距在数学上仍可能必不可少。
一个点与其预测之间带符号的垂直距离叫作残差(residual):
正残差表示模型低估,负残差表示模型高估。普通最小二乘(Ordinary Least Squares, OLS)会选择让残差平方和最小的系数:
平方既防止正负残差互相抵消,也让长残差付出更大代价。在实验中,每条残差会变成一个正方形的边;OLS 寻找的,就是所有正方形总面积最小的线。
特征变多后,同一思想会从直线扩展成平面或高维超平面:
LinearRegression 会从训练数据估计这些系数:
from sklearn.dummy import DummyRegressor
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
dummy = Pipeline([
("preprocess", preprocess),
("regressor", DummyRegressor(strategy="mean")),
])
linear = Pipeline([
("preprocess", preprocess),
("regressor", LinearRegression()),
])
dummy.fit(X_train, y_train)
linear.fit(X_train, y_train)
validation_predictions = linear.predict(X_valid)均值 Dummy 基线仍然不能省略。模型有系数并不等于模型有用;它必须在留出数据上稳定优于一条完全忽略 的规则。
把假设读成留出残差中的图形
“线性”指模型对系数是线性的,并不要求每个原始输入与目标都只能是直线关系。PolynomialFeatures 可以产生 或 等交互项,模型对学得系数仍保持线性:
不能仅为了把训练残差压平就不断加项。所有转换都应进入 Pipeline,并在完全相同的验证折上比较。
残差图能把抽象假设转换成肉眼可见的问题:
| 留出数据中的图形 | 可能含义 | 下一步调查 |
|---|---|---|
| 围绕零线随机散布 | 没有明显遗漏的均值结构 | 继续检查切片与折间稳定性 |
| U 形或波浪 | 遗漏曲率或交互 | 有依据的基函数或其他模型家族 |
| 逐渐张开的漏斗 | 误差方差不恒定 | 目标尺度、分组或方差模型 |
| 分离的水平带 | 遗漏组结构 | 组特征可用性与分组划分 |
| 一个远端高杠杆点 | 可能强烈影响拟合 | 验证记录并比较稳健模型 |
对预测真正有用的假设,应当理解成实际检查:
- 所选特征基函数能够近似条件均值。
- 训练行不会偷偷重复或揭示验证行;行间依赖由划分策略处理。
- 特征不存在完全冗余;强共线性要被诊断,因为它会让系数不稳定。
- 训练人群在计划部署范围内能够代表未来人群。
残差方差恒定有助于形成一致的误差解释,也是一些经典不确定性计算的条件。但拟合 OLS 不要求目标本身服从正态分布。某些统计推断公式会对残差提出额外假设,预测能力仍应由留出证据判断。
异常点也不自动等于错误。它可能是录入问题、真实罕见运营状态,或“一个模型不够”的证据。删除之前先验证来源;如果处理合理,还要展示处理前后的结论敏感性。
OLS 已经提供了几何目标和诊断语言。下一节会研究原始类别与不同计量单位怎样组成模型真正看到的设计矩阵。