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

Python中SVR回归预测报错:ValueError:预期2D数组,实际得到1D数组

SVR回归预测中的数组维度错误解决

问题场景

使用SVR模型对Position_Salaries数据集进行薪资预测时,执行预测步骤触发ValueError,提示数组维度不匹配。

报错信息

ValueError: Expected 2D array, got 1D array instead:
array=[-0.27861589].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

问题原因

svr_regressor.predict(sc_X.transform([[6.5]]))返回的是1D数组(形状为(1,)),而sc_y.inverse_transform()要求输入必须是2D数组(比如形状为(1,1)),维度不匹配导致报错。

解决方案

只需对预测结果进行维度转换,将1D数组转为2D数组即可,有两种常用方式:

方式1:使用reshape方法

修改预测代码行:

y_predict = sc_y.inverse_transform(svr_regressor.predict(sc_X.transform([[6.5]])).reshape(-1, 1))

方式2:使用np.reshape函数

修改预测代码行:

y_predict = sc_y.inverse_transform(np.reshape(svr_regressor.predict(sc_X.transform([[6.5]])), (-1, 1)))

额外优化:训练时的y维度规范

sklearn的SVR模型fit方法期望目标变量y是1D数组,原代码中y=np.reshape(y,(10,1))将y转为2D数组,可能引发警告。建议调整为:

# 先转为2D用于特征缩放,再转为1D用于模型训练
y_scaled = sc_y.fit_transform(y.reshape(-1, 1))
y_scaled = y_scaled.ravel()

修正后的完整代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

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

# 分割数据集(注释状态)
'''from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state = 0)'''

# 特征缩放
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X)
# 调整y维度以适配缩放和模型训练
y_scaled = sc_y.fit_transform(y.reshape(-1, 1))
y_scaled = y_scaled.ravel()

# SVR回归模型
from sklearn.svm import SVR
svr_regressor = SVR(kernel='rbf')
svr_regressor.fit(X, y_scaled)

# 预测指定值
y_predict = sc_y.inverse_transform(svr_regressor.predict(sc_X.transform([[6.5]])).reshape(-1, 1))
print(y_predict)

# 可视化SVR模型
plt.scatter(X, y_scaled, color = 'blue')
plt.plot(X, svr_regressor.predict(X), color = 'red')
plt.title('SVR Salary Prediction')
plt.xlabel('Position Level')
plt.ylabel('Salary')
plt.show()

内容的提问来源于stack exchange,提问作者Rifa tabassum Mim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:35:18