值错误:预期的 2D 数组,得到 1D 数组:

Posted

技术标签:

【中文标题】值错误:预期的 2D 数组,得到 1D 数组:【英文标题】:Value Error: Expected 2D array, got 1D array instead: 【发布时间】:2021-12-28 03:39:00 【问题描述】:

在练习支持向量回归模型时遇到此错误

这是我的数据集:

这里是自变量X:

这里是因变量Y:

这里是 X_train

这里是 Y_train

错误正文:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-40-2de23298b092> in <module>()
----> 1 sc_y.inverse_transform(regressor.predict(sc_X.transform([[6.5]])))

1 frames
/usr/local/lib/python3.7/dist-packages/sklearn/preprocessing/_data.py in inverse_transform(self, X, copy)
   1020             estimator=self,
   1021             dtype=FLOAT_DTYPES,
-> 1022             force_all_finite="allow-nan",
   1023         )
   1024 

/usr/local/lib/python3.7/dist-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator)
    763                     "Reshape your data either using array.reshape(-1, 1) if "
    764                     "your data has a single feature or array.reshape(1, -1) "
--> 765                     "if it contains a single sample.".format(array)
    766                 )
    767 

ValueError: Expected 2D array, got 1D array instead:
array=[0.01150915].
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.

我的代码:

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

dataset = pd.read_csv('Position_Salaries.csv')
X = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values
y = y.reshape(len(y), 1)

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X)
y = sc_y.fit_transform(y)

from sklearn.svm import SVR
regressor = SVR(kernel = 'rbf')
regressor.fit(X, y)

sc_y.inverse_transform(regressor.predict(sc_X.transform([[6.5]])))

【问题讨论】:

【参考方案1】:

问题在于您在代码的最后一行中提供给sc_X.transform()) 的测试输入[[6.5]]

尝试找到 X 的形状并使用numpy.shape 测试输入,并确保两种情况下的维度数都应为 2。所以你会得到类似(Xi, Xj)(Ti, Tj)的东西。此外,Xj 必须与 Tj 相同(基本上特征数量必须与训练和测试数据匹配)

【讨论】:

【参考方案2】:

如果您的数据集有 8 列,则选择 X 和 y 的方法如下

values = dataset.values
X = values[:,0:8]
y = values[:,8]

从那里获取,还要注意 values 已被弃用,而是 to_numpy()

【讨论】:

以上是关于值错误:预期的 2D 数组,得到 1D 数组:的主要内容,如果未能解决你的问题,请参考以下文章

“ValueError:预期的 2D 数组,得到 1D 数组”的问题

使用 OneHotEncoder 出现错误“预期的二维数组,而是得到一维数组”

将 2D numpy 数组重塑为 3 个具有 x,y 索引的 1D 数组

Numpy quirk:将函数应用于两个 1D 数组的所有对,以获得一个 2D 数组

预期 conv2d_7 的形状为 (4, 268, 1) 但得到的数组形状为 (1, 270, 480)

将 1D 向量作为行推入 2D 向量数组