Skip to content

评估与诊断

本章目标

  1. 理解当前 SVR 流水线的两类评估输出——残差图和学习曲线。
  2. 理解支持向量数量作为 SVR 独有的诊断指标的价值。
  3. 明确当前流水线已实现未实现的评估项——SVR(RBF 核)没有特征重要性。

重点方法与概念速览

名称类型作用
plot_residuals(...)函数生成预测-真实散点图 + 残差分布图——诊断非线性拟合质量
plot_learning_curve(...)函数生成训练/验证 R² 曲线——诊断泛化趋势
residuals = y_true - y_pred派生量衡量每个样本的预测误差
model.support_.shape[0]派生量支持向量数量——SVR 独有的模型复杂度诊断

1. 残差图

参数速览

适用函数:plot_residuals(y_test, y_pred, title, dataset_name, model_name)

参数名类型说明示例取值
y_testndarray,形状 (40,)测试集真实值——Friedman1 目标
y_predndarray,形状 (40,)SVR 模型预测值model.predict(X_test_s)
titlestr图标题"SVR 残差分析"
dataset_namestr输出目录名"svr"
model_namestr输出文件名前缀"svr"

示例代码

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="--")

理解重点

  • 对于 SVR 在 Friedman1 数据上,残差图应显示较好的非线性拟合——点应大致沿对角线分布。
  • 右图(残差 vs 预测)重点观察残差是否有系统性弯曲——若残差呈现 U 形或正弦形模式,说明 RBF 核的 γ 或 ε 设置不当。
  • 残差图回答的是"预测误差分布如何"——与支持向量数量回答的"模型多复杂"是互补视角。
  • 对于非线性数据,残差图的波动通常比线性回归稍大——非线性拟合本身就比纯线性公式更难覆盖所有变化。

2. 学习曲线

参数速览

适用函数:plot_learning_curve(estimator, X, y, scoring, cv, title, dataset_name, model_name)

参数名类型说明示例取值
estimatorSVR未训练的新 SVR 实例——学习曲线内部多次 fitSVR(C=10.0, epsilon=0.1, kernel='rbf', gamma='scale')
Xndarray(160, 10)训练集特征——标准化后X_train_s
yndarray(160,)训练集目标y_train
scoringstr评分指标"r2"
cvint交叉验证折数5(默认)

示例代码

python
plot_learning_curve(
    SVR(C=10.0, epsilon=0.1, kernel="rbf", gamma="scale"),
    X_train_s,
    y_train,
    scoring="r2",
    title="SVR 学习曲线",
    dataset_name="svr",
    model_name="svr",
)

理解重点

  • 学习曲线传入的是SVR(...) 实例——而非已训练的 model_buildLearningCurveFactory("regression.svr") 返回的工厂函数确保每次 CV 都从头训练。
  • 对于 SVR + Friedman1(160 训练样本 + 10 特征):训练和验证曲线间通常有一定的间隙——因为 SVR(RBF 核)在 160 样本上开始需要更多数据来稳定泛化。
  • 如果训练 R² 远高于验证 R²——过拟合信号,考虑增大 ε 或减小 C。
  • 如果训练和验证 R² 都低——欠拟合信号,考虑减小 ε 或增大 C,或检查 γ 设置。

3. 支持向量数量:SVR 独有的诊断指标

参数速览

指标计算方式诊断含义
nSVmodel.support_.shape[0]支持向量的绝对数量
nSV 占比nSV / len(y_train)支持向量占训练样本的比例
nSV 偏低(< 30%)ε 管道宽——模型简单,可能欠拟合
nSV 适中(30%~60%)模型复杂度合理——多数样本被管道容忍
nSV 偏高(> 75%)ε 管道窄或 C 大——模型复杂,可能过拟合

示例代码

python
n_sv = model.support_.shape[0]
sv_ratio = n_sv / len(y_train)
print(f"支持向量数量: {n_sv}/{len(y_train)} ({sv_ratio:.1%})")

理解重点

  • 支持向量数量比 R² 更直接地反映 SVR 的复杂度——R² 告诉你"预测多准",nSV 告诉你"模型多复杂"。
  • 如果 nSV 接近 N_train(如 150/160),模型几乎"记住"了每个样本——过拟合风险极高。
  • 如果 nSV 极低(如 5/160),ε 管道覆盖了绝大多数样本——模型可能过于简单。
  • nSV 是 SVR 独有的诊断——线性回归和决策树没有等效指标。

4. SVR 没有特征重要性:原因与替代

参数速览

评估项状态原因
特征重要性(RBF 核)无法输出RBF 核将数据映射到无限维空间——权重存在于对偶空间,不可映射回原始特征
特征重要性(线性核)可输出(coef_线性核 SVR 有 coef_ 属性——相当于带 ε-管道的线性回归

理解重点

  • PipelineSpec 中 SVR 的训练后诊断列表为 []——不是遗漏,而是 RBF 核确实无法输出特征重要性。
  • 这与线性回归(有 coef_)、决策树(有 feature_importances_)、正则化回归(有 coef_ + 近零计数)形成鲜明对比。
  • RBF 核的可解释性代价:获得了非线性拟合能力,但失去了"哪个特征更重要"的判断。
  • 如果需要特征重要性,可以考虑切换为线性核(kernel='linear')——但会丧失非线性拟合能力。

5. 残差图 + 学习曲线 + 支持向量数量:联合诊断

参数速览

残差图学习曲线nSV联合诊断
训练 ≈ 验证适中模型健康——拟合与泛化平衡
训练 ≫ 验证过拟合——模型复杂但泛化差,需增大 ε 或减小 C
训练 ≈ 验证(两者都低)欠拟合——模型太简单,需减小 ε 或增大 C
系统性弯曲(如 U 形)训练 ≈ 验证非线性捕捉不足——尝试调整 γ

理解重点

  • 单独看任何一个指标都可能给出片面判断——三者联合解读才有完整图景。
  • nSV 是最快的诊断入口——如果 nSV 在 50~80(30%~50%),通常说明模型复杂度合理。
  • 残差图的系统性弯曲是最明确的"核函数/参数不匹配"信号——应优先于 R² 数值被关注。

6. 已实现 vs 未实现的评估

参数速览

评估项状态原因
残差图已实现回归模型的核心诊断工具
学习曲线已实现_buildLearningCurveFactory("regression.svr")
支持向量数量打印已实现训练日志中打印——model.support_.shape[0]
特征重要性不适用RBF 核 SVR 无法输出特征重要性
MSE / MAE / R² 数值打印未实现当前流水线侧重图形化诊断
交叉验证 R² 均值未实现学习曲线内部使用 CV,但未单独输出均值

7. SVR vs 线性回归 vs 正则化回归 评估对比

评估维度线性回归正则化回归SVR
核心可视化残差图 + 学习曲线残差图 + 特征重要性残差图 + 学习曲线
模型解释coef_ + intercept_coef_ + intercept_ + 近零计数support_ + dual_coef_——核空间不可解释
独有诊断系数与真实公式对照近零系数计数——L1 稀疏化支持向量数量 + 占比——模型复杂度
特征重要性coef_ 直接输出coef_ 直接输出无(RBF 核)——需切换为线性核
定量指标无显式打印无显式打印无显式打印

常见坑

  1. 期待 SVR(RBF 核)输出特征重要性——这是回归分册中唯一不适用特征重要性的模型。
  2. 只关注残差图不关注 nSV——nSV 偏低或偏高会直接揭示模型是否"偷懒"或"过劳"。
  3. 用训练好的 model 传入学习曲线——学习曲线需要新 SVR(...) 实例做内部 CV。
  4. 在 Friedman1 这类非线性数据上要求残差与线性回归一样规整——非线性拟合天然有更大波动。

小结

  • SVR 有两类评估输出(残差图 + 学习曲线)+ 一项日志输出(支持向量数量)——三者构成完整的诊断体系。
  • 支持向量数量是 SVR 独有的诊断指标——比 R² 更直接地反映模型复杂度。
  • SVR(RBF 核)没有特征重要性——这是非线性核的可解释性代价,也是 PipelineSpec 训练后诊断列表为 [] 的原因。
  • 残差图 + 学习曲线 + nSV 的联合解读比单独依赖任何一个指标都更可靠。