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

SVR预测中sc_y.inverse_transform报维度错误的解决方法

问题根因

这个报错的触发逻辑非常明确:scikit-learn 中StandardScaler的inverse_transform方法强制要求输入为二维数组,形状格式为(样本数, 特征数)。
你代码里regressor.predict()不管传入的待预测样本是几维,输出永远是形状为(样本数,)的一维数组,直接把这个一维数组传给sc_y.inverse_transform()就会触发维度校验失败的ValueError。
另外你贴的流程里还有一个容易被忽略的逻辑错误:训练SVR时用的是经过sc_X标准化后的特征,预测时不能直接传入原始值[[6.5]],必须先经过sc_X做特征缩放,否则预测结果会完全失真。

错误复现代码
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR

# 数据加载
dataset = pd.read_csv('Position_Salaries.csv')
X = dataset.iloc[:, 1:2].values
y = dataset.iloc[:, 2].values

# 特征与标签标准化
sc_X = StandardScaler()
sc_y = StandardScaler()
X_scaled = sc_X.fit_transform(X)
y_scaled = np.squeeze(sc_y.fit_transform(y.reshape(-1, 1)))

# 模型训练
regressor = SVR(kernel='rbf')
regressor.fit(X_scaled, y_scaled)

# 错误写法:1. 待预测值未做特征缩放 2. 预测结果未调整维度直接传入反缩放
y_pred_scaled = regressor.predict([[6.5]])
y_pred = sc_y.inverse_transform(y_pred_scaled) # 此处抛出ValueError
修正方案

只需要在两处做调整即可:

  • 待预测的原始职级值先通过sc_X做标准化,再传入模型预测
  • 模型输出的一维预测结果通过reshape(-1,1)转成单特征的二维数组,再传入sc_y做反归一化

修正后的预测代码如下:

# 1. 先对输入的待预测职级做特征缩放
input_scaled = sc_X.transform([[6.5]])
# 2. 得到缩放后的预测值
y_pred_scaled = regressor.predict(input_scaled)
# 3. 将一维预测结果转成二维后做反归一化
y_pred = sc_y.inverse_transform(y_pred_scaled.reshape(-1, 1))
# 如需得到单个薪资数值,直接取索引即可
predicted_salary = y_pred[0][0]
可视化注意事项

后续绘制SVR拟合曲线时也要保持维度和尺度一致:

  • 用于绘图的网格特征值必须先经过sc_X标准化,再传入模型predict
  • predict输出的一维预测值必须转成二维后经sc_y反归一化,再作为绘图的y轴值
  • 绘图时用原始X、原始y作为散点,反归一化后的预测值作为曲线,坐标尺度才能匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:42:14