我无法解决代码中显示的数组维度问题。当我试图找出 y_predict 时,出现了 valueerror 问题。这是代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#importing dataset
dataset = pd.read_csv('Position_Salaries.csv')
X = dataset.iloc[:,1:2].values
y = dataset.iloc[:,2].values
y=np.reshape(y,(10,1))
#Spliting dataset into training set and test set
'''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)'''
#Feature scaling
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X)
y = sc_y.fit_transform(y)
######## SVR regression
from sklearn.svm import SVR
svr_regressor = SVR(kernel='rbf') #rbf = gaussian kernel
svr_regressor.fit(X, y)
#Prediction of given value using SVR regression
X = np.reshape(X,(-1, 1))
y_predict = sc_y.inverse_transform(svr_regressor.predict(sc_X.transform([[6.5]])))
########### Visulization of svr model
plt.scatter(X, y, color = 'blue')
plt.plot(X, svr_regressor.predict(X), color = 'red')
plt.show()
我收到错误: ValueError:需要 2D 数组,却得到 1D 数组: 数组=[-0.27861589]。 如果数据具有单个特征,则使用 array.reshape(-1, 1) 重塑数据;如果数据包含单个样本,则使用 array.reshape(1, -1) 重塑数据。
有点晚了,但我在这里以防万一将来有人需要它,所以 问题出在接近结尾处的
inverse_transform
函数
y_predict = sc_y.inverse_transform(svr_regressor.predict(sc_X.transform([[6.5]])))
此函数仅采用 2D 类似数组的数据,即形状 (n_samples,n_features) 作为参数,但您传递的参数是
predict
对象中 SVR
函数的结果,根据 官方文档这将返回一个形状数组(n_samples,),意思是,一个一维数组,这就是引发valueError的原因
为了解决这个问题,您必须将
predict
函数的结果整形为二维数组,它看起来像这样:
reg = regressor.predict(sc_X.transform(np.array([[6.5]])))
reg = np.reshape(reg,(-1,1))
sc_Y.inverse_transform(reg)