You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sklearn中Support vector regression输出平坦预测结果的问题咨询

问题原因及解决方案

  • 第一个问题:数据预处理存在数据泄露
    你当前的MinMaxScaler拟合时使用了全量特征数据集df_ohe,违反了训练/测试集信息隔离的原则,正确的做法是仅用训练集数据拟合scaler:
# 错误写法
# scaler.fit(df_ohe)
# 正确写法
scaler.fit(X_train)

这虽然不是直接导致输出全为常数的核心原因,但会导致你后续的模型评估结果不可信。

  • 第二个核心问题:SVR默认超参数和你的数据集不匹配,导致模型严重欠拟合
    sklearn中SVR的默认参数C=1、epsilon=0.1,针对你这个场景存在两个适配问题:
    1. 森林火灾数据集的area字段分布极度偏斜,经过log10(area+1)变换后的标签数值范围非常小,默认的epsilon=0.1设置过大,模型认为直接输出标签均值就可以满足损失要求
    2. 默认C=1的正则化强度过高,限制了模型的拟合能力,最终模型就会输出全量常数的预测结果

修复步骤

  1. 先调整核心超参数,你可以先手动测试下列参数验证效果:
svr = SVR(C=100, epsilon=0.001, gamma='scale')
  1. 后续可以通过网格搜索自动获取最优超参数,示例代码如下:
from sklearn.model_selection import GridSearchCV

param_grid = {
    'C': [1, 10, 100, 1000],
    'epsilon': [0.0001, 0.001, 0.01, 0.1],
    'gamma': ['scale', 'auto', 0.01, 0.1]
}
grid = GridSearchCV(SVR(), param_grid, cv=5, scoring='neg_mean_squared_error')
grid.fit(rescaled_X_train, Y_train)
# 用最优参数的模型预测
svr_best = grid.best_estimator_
y_pred = svr_best.predict(rescaled_X_test)

调整后你再绘制预测值和真实值的对比图,就不会出现全平坦的输出结果了。

内容的提问来源于stack exchange,提问作者Abijah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:15:01