Skip to content

训练与预测

本章目标

  1. 理解正则化回归流水线的完整执行顺序——从数据加载到残差图输出。
  2. 理解三种模型的训练过程——坐标下降(Lasso/EN)vs 闭式解(Ridge)。
  3. 理解预测阶段的统一循环——三模型共用同一份标准化测试数据。

重点方法与概念速览

名称类型作用
loadRegularizationDataset()方法加载 diabetes + 共线 + 噪声特征——返回 (442, 22) DataFrame
StandardScaler预处理Z-score 标准化——正则化回归训练前的强制步骤
trainRegularizationModels(...)函数构建并 fit 三个正则化模型——返回模型字典
model.predict(X_test_s)方法对标准化测试集做回归预测——y^=Xw+b
plot_residuals(...)函数为每个模型绘制残差诊断图

1. 完整流水线流程

流程概述

loadRegularizationDataset()

    ├─ ① X = data.drop(columns=["price"]), y = data["price"]
    ├─ ② X_train, X_test, y_train, y_test = train_test_split(test_size=0.2)
    ├─ ③ scaler = StandardScaler(); X_train_s = scaler.fit_transform(X_train)
    ├─ ④ X_test_s = scaler.transform(X_test)
    ├─ ⑤ models = trainRegularizationModels(X_train_s, y_train)
    ├─ ⑥ for name, model in models.items():
    │       y_pred = model.predict(X_test_s)
    │       plot_residuals(y_test, y_pred, ...)
    └─ ⑦ plot_feature_importance(model, feature_names)  — 对每个模型

参数速览

步骤操作输入输出说明
加载数据loadRegularizationDatasetDataFrame(442, 22)diabetes + 共线 + 噪声
特征标签拆分drop + 列选择DataFrameX(442,21), y(442,)标签列 price
数据切分train_test_splitX, yX_train(353,21), X_test(89,21)test_size=0.2
标准化StandardScalerX_train, X_testX_train_s, X_test_s正则化回归必需
训练trainRegularizationModelsX_train_s, y_traindict[lasso/ridge/elasticnet]一次训练三个模型
预测model.predictX_test_s各模型 y_pred(89,)循环三次
残差图plot_residualsy_test, y_predPNG 图像每个模型一张
特征重要性plot_feature_importancemodel, feature_namesPNG 图像系数柱状图

理解重点

  • 正则化回归流水线比线性回归多两步——标准化(③④)和特征重要性图(⑦),但没有学习曲线。
  • 标准化在切分之后执行——先在训练集上 fit_transform,再对测试集仅 transform
  • 三个模型共享完全相同的训练/测试数据——对比的公平性由统一的切分和标准化保证。

2. 标准化:正则化回归训练的关键前置步骤

参数速览

适用 API:StandardScaler().fit_transform(X_train) / StandardScaler().transform(X_test)

参数名类型说明示例取值
X_trainndarray(353, 21)未标准化的训练特征原始 diabetes + 构造特征
X_train_sndarray(353, 21)标准化后——每列均值 0、标准差 1
X_test_sndarray(89, 21)使用训练集统计量标准化

示例代码

python
scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)  # 计算 μ, σ 并变换
X_test_s = scaler.transform(X_test)         # 仅变换——使用训练集的 μ, σ

理解重点

  • 正则化回归必须标准化——L1/L2 惩罚对系数量级敏感。未标准化的特征会导致惩罚不均匀:量级大的特征被过度惩罚,量级小的特征惩罚不足。
  • 这是正则化回归与线性回归、决策树回归最关键的工程差异——两者在 PipelineSpec 中的预处理分别为 None"standardScaler"
  • fit_transform vs transform 的区别是防止数据泄露——测试集的均值和标准差不应影响模型。

3. 训练细节:三种算法,三种求解路径

参数速览

模型求解算法是否有闭式解是否需要迭代收敛判断
RidgeSVD / 闭式解——w=(XTX+λI)1XTy不需要
Lasso坐标下降——max_iter=10000对偶间隙 < tol
ElasticNet坐标下降——max_iter=10000对偶间隙 < tol

理解重点

  • Ridge 训练是瞬时的——21 维特征的闭式解计算量极小。
  • Lasso 和 ElasticNet 是迭代的——坐标下降逐维度优化,max_iter=10000 确保充分收敛。
  • 三种模型都保证找到全局最优解——Ridge 的目标函数是强凸的,Lasso/EN 是凸的(坐标下降收敛到全局最优)。

4. 预测细节:统一的线性公式

三种模型的预测公式完全相同:

y^=Xtestw+b

参数速览

参数名类型说明示例取值
X_test_sndarray(89, 21)标准化后的测试特征
model.coef_ndarray(21,)各模型的系数向量——形态因正则化策略而异Lasso:部分零 / Ridge:全非零
model.intercept_float截距项——不受正则化惩罚
y_predndarray(89,)预测值

理解重点

  • 预测公式与普通线性回归完全一致——都是 Xw+b 的矩阵乘法。
  • 差异不在预测公式,而在 w 的形态——Lasso 的 w 有零分量,Ridge 的 w 整体收缩。
  • 预测复杂度 O(Ntestd)=O(89×21)——几乎瞬时。

5. 多模型预测循环

示例代码

python
models = trainRegularizationModels(X_train_s, y_train, randomState=42)

for name, model in models.items():
    y_pred = model.predict(X_test_s)
    plot_residuals(
        y_test, y_pred,
        title=f"{name} 残差分析",
        dataset_name="regularization",
        model_name=name,
    )
    plot_feature_importance(
        model, feature_names,
        title=f"{name} 系数",
        dataset_name="regularization",
        model_name=name,
    )

理解重点

  • 循环结构是正则化回归流水线的独特特征——其他回归模型只训练和评估一个模型。
  • 每个模型都生成独立的残差图和系数图——便于横向对比三种正则化策略的差异。
  • model_name=name 使输出文件自动按模型名命名(lasso_residual.pngridge_coefficients.png 等)。

6. 正则化回归 vs 线性回归 vs 决策树回归 训练对比

训练维度线性回归决策树回归正则化回归
数据合成 (200, 3)真实 (20640, 8)真实+构造 (442, 21)
标准化StandardScaler——强制
训练算法SVD 闭式解CART 贪心递归坐标下降(Lasso/EN)+ 闭式解(Ridge)
训练模型数113(并行训练)
收敛判断不需要max_depth 等早停max_iter=10000(Lasso/EN)
预测y^=Xw+b沿树走到叶子返回均值y^=Xw+b(同线性回归)
评估可视化残差图 + 学习曲线残差图 + 特征重要性 + 学习曲线 + 树结构残差图 + 特征重要性——无学习曲线

常见坑

  1. 训练时传 X_train_s,预测时却传了未标准化的 X_test——预测结果会严重偏离。
  2. 忘记标准化必须在切分之后——先标准化再切分会导致测试集信息泄露。
  3. 期待正则化回归也有学习曲线——当前 PipelineSpec 中学可视化列表为 [],无学习曲线。
  4. 以为 Lasso 和 Ridge 的 alpha 可以直接比较——alpha=0.15(Lasso)和 alpha=2.0(Ridge)量级不同,因为 L1 和 L2 的惩罚尺度不同。

小结

  • 正则化回归流水线为 8 步:加载 → 拆分 → 切分 → 标准化 → 训练三模型 → 循环预测 → 残差图 → 系数图。
  • 标准化是正则化回归区别于线性回归和决策树回归的最关键工程差异——惩罚项对尺度敏感。
  • 训练阶段一次产出三个模型——Ridge 用闭式解瞬间完成,Lasso/EN 用坐标下降迭代求解。
  • 预测阶段与线性回归完全相同(Xw+b)——差异在 w 的形态而非预测公式。