评估与诊断
本章目标
- 理解当前正则化回归的两类评估输出——残差图和系数图(特征重要性)。
- 理解近零系数计数作为正则化回归独有诊断指标的价值。
- 明确当前流水线已实现和未实现的评估项。
重点方法与概念速览
| 名称 | 类型 | 作用 |
|---|---|---|
plot_residuals(...) | 函数 | 生成预测-真实散点图 + 残差分布图——诊断拟合质量 |
plot_feature_importance(...) | 函数 | 生成系数柱状图——诊断稀疏性和特征权重分布 |
residuals = y_true - y_pred | 派生量 | 衡量每个样本的预测误差 |
np.sum(np.abs(coef) < 1e-3) | 派生量 | 近零系数计数——正则化回归独有的稀疏性诊断 |
1. 残差图
参数速览
适用函数:plot_residuals(y_test, y_pred, title, dataset_name, model_name)
| 参数名 | 类型 | 说明 | 示例取值 |
|---|---|---|---|
y_test | ndarray,形状 (89,) | 测试集真实值 | 糖尿病病情进展 |
y_pred | ndarray,形状 (89,) | 模型预测值 | 各模型分别预测 |
title | str | 图标题 | "Lasso 残差分析" |
dataset_name | str | 输出目录名 | "regularization" |
model_name | str | 输出文件名前缀——区分三模型 | "lasso", "ridge", "elasticnet" |
示例代码
python
y_pred = model.predict(X_test_s)
residuals = y_test - y_pred
# 左图: 预测值 vs 真实值散点图
ax1.scatter(y_test, y_pred, alpha=0.6)
# 右图: 残差 vs 预测值散点图
ax2.scatter(y_pred, residuals, alpha=0.6)
ax2.axhline(y=0, color="r", linestyle="--")理解重点
- 每个模型生成独立的残差图——可以直接对比三种正则化策略的预测误差分布。
- 左图看整体拟合:点越贴近对角线,预测越准确。在 diabetes 数据上,三种模型的散点分布差异通常不大——因为底层都是线性模型。
- 右图看系统偏差:残差围绕 0 随机分布为健康状态。若残差呈 U 形或漏斗形,说明线性假设可能不足。
- 残差图回答的是"预测误差分布如何"——与系数图回答的"模型如何分配权重"是互补关系。
2. 系数图(特征重要性)
参数速览
适用函数:plot_feature_importance(model, feature_names, title, dataset_name, model_name)
| 参数名 | 类型 | 说明 | 示例取值 |
|---|---|---|---|
model | 已训练的模型 | 含 coef_ 属性——系数向量 | Lasso / Ridge / ElasticNet |
feature_names | list[str] | 21 个特征名——与 coef_ 一一对应 | ["age", "sex", ..., "noise_8"] |
title | str | 图标题 | "Lasso 系数" |
dataset_name | str | 输出目录名 | "regularization" |
model_name | str | 输出文件名前缀 | "lasso" |
理解重点
- 系数图是正则化回归最重要的诊断工具——比残差图更具模型特异性。
- Lasso 的系数图中应能看到部分柱状条高度为零——被清零的特征一目了然。
- Ridge 的系数图中所有柱状条非零但整体较小——收缩效果通过系数量级体现。
- ElasticNet 的系数图介于两者之间——部分清零 + 部分收缩。
3. 近零系数计数:正则化回归独有的诊断指标
参数速览
| 指标 | 计算方式 | 诊断含义 |
|---|---|---|
near_zero | np.sum(np.abs(model.coef_) < 1e-3) | 系数绝对值小于 0.001 的特征数 |
阈值 1e-3 | 工程容差——非严格等于零 | 避免将极小但非零的系数误判为零 |
示例代码
python
for name, model in models.items():
coef = model.coef_
near_zero = np.sum(np.abs(coef) < 1e-3)
print(f"{name} 近零系数: {near_zero}/{len(coef)}")
for f, c in zip(feature_names, coef):
print(f" {f}: {c:.3f}")理解重点
- 近零系数计数直接量化 L1 的稀疏化效果——Lasso 的
near_zero应 > 0,Ridge 通常 = 0。 - 用
< 1e-3而非== 0——坐标下降结果可能存在极小但非精确零的系数。 - 重点关注
noise_*特征的系数是否被清零——它们理论上不应有任何非零权重。 - 对于
bmi/bmi_corr共线对——Lasso 可能清零其中之一,Ridge 两者均保留。
4. 三模型对比:残差图 + 系数图 + 近零计数的联合解读
参数速览
| 诊断维度 | Lasso | Ridge | ElasticNet |
|---|---|---|---|
| 近零系数数 | 高——noise_* 被清零 | 低——通常为 0 | 中——介于两者之间 |
noise_* 系数 | 接近零 | 非零但很小 | 接近零 |
bmi vs bmi_corr | 可能只保留一个 | 两者均非零,权重分摊 | 两者均非零但较小 |
| 残差图 | 与 Ridge 相近——底层都是线性模型 | 与 Lasso 相近 | 与两者相近 |
| 可解释性 | 最高——系数表简洁 | 中——所有特征都参与 | 较高——兼具筛选和分摊 |
理解重点
- 三种模型在 diabetes 数据上的残差图差异通常不大——因为它们都是线性模型,预测能力相近。
- 真正的差异在系数结构——Lasso 的系数表比 Ridge 简洁得多(噪声被清零)。
- 正则化回归的诊断核心不是"哪个模型预测更准",而是"哪个模型以更合理的系数结构达到相近的预测精度"。
- 如果 Lasso 的预测精度与 Ridge 相近但系数更稀疏——则 Lasso 更可取(奥卡姆剃刀原则)。
5. 已实现 vs 未实现的评估
参数速览
| 评估项 | 状态 | 原因 |
|---|---|---|
| 残差图 | 已实现 | 回归模型的核心诊断——每个模型独立生成 |
| 系数图(特征重要性) | 已实现 | 正则化回归最关键的诊断——系数结构可视化 |
| 系数打印 + 近零计数 | 已实现 | 训练日志中打印——可对照系数图验证 |
| MSE / MAE / RMSE / R² 数值打印 | 未实现 | 当前流水线侧重图形化诊断而非数值指标 |
| 学习曲线 | 未实现 | PipelineSpec 中学可视化列表为 [] |
| 交叉验证 | 未实现 | 无 cross_val_score 等调用 |
理解重点
- 与线性回归和决策树回归不同——正则化回归没有学习曲线(
PipelineSpec中学可视化为[])。 - 评估设计聚焦于系数结构对比——残差图看预测误差,系数图 + 近零计数看正则化行为。
- 正则化回归独有的评估优势是可以直接观察"特征选择"——其他回归模型没有 L1 清零机制。
6. 正则化回归 vs 线性回归 vs 决策树回归 评估对比
| 评估维度 | 线性回归 | 决策树回归 | 正则化回归 |
|---|---|---|---|
| 核心可视化 | 残差图 + 学习曲线 | 残差图 + 特征重要性 + 学习曲线 + 树结构 | 残差图 + 特征重要性——无学习曲线 |
| 模型解释 | coef_ + intercept_ | feature_importances_ | coef_ + 近零计数——可验证特征选择 |
| 独有诊断 | 系数与真实公式对照 | 树结构可视化 | 近零系数计数——L1 稀疏化量化 |
| 定量指标 | 无显式打印 | 无显式打印 | 无显式打印 |
| 对比模式 | 单模型诊断 | 单模型诊断 | 三模型横向对比——Lasso vs Ridge vs EN |
常见坑
- 只看残差图不看系数图——正则化回归的核心诊断在系数结构,残差图只是辅助。
- 把"系数更稀疏"等同于"预测更准"——稀疏性与准确性是正交的评估维度。
- 期待
near_zero中noise_*全部精确为零——坐标下降可能产生1e-5量级的极小系数,用1e-3阈值统一判断。 - 忽略三模型对比视角——单独看一个模型的系数没有意义,必须并排对比 Lasso/Ridge/ElasticNet。
小结
- 正则化回归有两类评估输出(残差图 + 系数图)+ 一项日志输出(近零系数计数)——三者构成完整的诊断体系。
- 系数图是正则化回归最重要的诊断工具——比残差图更能体现三种正则化策略的行为差异。
- 近零系数计数是正则化回归独有的诊断指标——直接量化 L1 的稀疏化效果。
- 正则化回归没有学习曲线——这是
PipelineSpec的明确配置,与线性回归和决策树回归不同。