Skip to content

训练与预测

本章目标

  1. 理解线性回归流水线的完整执行顺序——从数据加载到残差图和学习曲线输出。
  2. 理解 OLS 的训练过程——SVD 闭式求解,无需迭代,无收敛判断。
  3. 理解 predict 的预测方式——简单的矩阵乘法 y^=Xw+b

重点方法与概念速览

名称类型作用
trainLinearRegressionModel(...)函数构建并训练线性回归模型——基于 SVD 的闭式求解
model.fit(X_train, y_train)方法求解 minw,b|yXwb|2——一次计算完成
model.predict(X_test)方法对测试集做矩阵乘法预测——y^=Xw+b
plot_residuals(...)函数绘制预测-真实散点图 + 残差分布图
plot_learning_curve(...)函数绘制训练/验证 R² 随样本量变化的曲线

1. 完整流水线流程

流程概述

loadLinearRegressionDataset()

    ├─ ① X = data.drop(columns=["price"]), y = data["price"]
    ├─ ② X_train, X_test, y_train, y_test = train_test_split(test_size=0.2)
    ├─ ③ model = trainLinearRegressionModel(X_train, y_train)
    ├─ ④ y_pred = model.predict(X_test)
    ├─ ⑤ plot_residuals(y_test, y_pred)
    └─ ⑥ plot_learning_curve(LinearRegression(), X_train, y_train, scoring="r2")

参数速览

步骤操作输入输出说明
加载数据loadLinearRegressionDatasetDataFrame(200, 4)手工合成线性房价
特征标签拆分drop + 列选择DataFrameX (200, 3)y (200,)标签列 price
数据切分train_test_splitXyX_train (160, 3)X_test (40, 3)test_size=0.2,无标准化
训练trainLinearRegressionModelX_trainy_trainLinearRegressionSVD 闭式求解——瞬间完成
预测model.predictX_testy_pred (40,)矩阵乘法
残差图plot_residualsy_testy_predPNG 图像误差分布诊断
学习曲线plot_learning_curveLinearRegression()X_trainy_trainPNG 图像样本量-得分趋势

理解重点

  • 这是本仓库最简流水线——仅 6 步,无标准化、无特征重要性、无树结构,聚焦于系数解释和残差诊断。
  • 训练步骤耗时极短(毫秒级)——3 个特征 × 160 样本的 SVD 求解计算量极小。
  • 与决策树回归流水线的对比:决策树多出特征重要性和树结构图两步,训练为贪心递归而非闭式求解。

2. 训练细节:SVD 闭式求解

算法流程

输入 X_train (160, 3), y_train (160,)

① 构建设计矩阵: X̃ = [1, X_train] → (160, 4)
② 对 X̃ 做奇异值分解: X̃ = U Σ V^T
③ 计算: w̃* = V Σ^{-1} U^T y_train
④ 返回: coef_ = w̃*[1:], intercept_ = w̃*[0]

理解重点

  • scikit-learn 的 LinearRegression 使用 scipy.linalg.lstsq(基于 SVD 或 QR 分解)求解——比直接计算 (XTX)1 的数值稳定性更好。
  • 训练是一次性的——没有迭代、没有收敛判断、没有 n_itertol 参数。
  • 这是 OLS 与所有迭代式训练算法(EM、Baum-Welch、梯度下降)的根本区别——OLS 保证找到全局最优解,且一步到位。

3. 预测细节:矩阵乘法

对测试样本矩阵 Xtest

y^=Xtestw+b=X~testw~

理解重点

  • 预测完全不涉及训练数据——模型参数 wb 已经固化在 coef_intercept_ 中。
  • 预测复杂度为 O(Ntestd)=O(40×3)——几乎瞬时。
  • 与决策树回归的预测对比:线性回归做矩阵乘法(全局统一公式),决策树沿树走到叶子(局部 if-else 路径)。

4. 与决策树回归训练流程的对比

步骤线性回归决策树回归
数据手工合成 (200, 3)真实数据 (20640, 8)
标准化
训练算法SVD 闭式解——一次性完成CART 贪心递归——逐层分裂
训练复杂度O(d3+Nd2)——极快O(dNlogN)——快
是否需要 random_state否——确定性解是——分裂涉及随机性
收敛判断不需要——闭式解一次到位需要 max_depth/min_samples_split 等早停
预测y^=Xw+b(矩阵乘法)沿树走到叶子 → 返回叶子均值
评估可视化残差图 + 学习曲线残差图 + 特征重要性 + 学习曲线 + 树结构

常见坑

  1. LinearRegression() 上期待看到 n_iter 或训练耗时——它是一次性闭式求解,没有迭代过程。
  2. plot_learning_curve 传入已训练的 model——学习曲线需要未训练的模型实例做交叉验证。
  3. 在 200 样本上期待看到学习曲线中训练/验证得分的巨大差异——线性回归参数少(4 个),小样本下也不容易过拟合。

小结

  • 线性回归流水线为最简 6 步:加载 → 拆分 → 切分 → 训练 → 预测 → 残差图 + 学习曲线——无标准化、无特征重要性、无树结构。
  • fit() 的核心是 SVD 闭式求解——一次计算,无迭代,无收敛判断,是 OLS 区别于所有迭代式算法的最本质特征。
  • predict() 是简单的矩阵乘法——测试样本与固定参数做线性组合,计算量极小。