【问题标题】:Problem with "ValueError: Expected 2D array, got 1D array instead"“ValueError:预期的 2D 数组,得到 1D 数组”的问题
【发布时间】:2020-03-19 00:53:08
【问题描述】:

我需要运行 SVR(支持向量回归)。我有一个 CSV 数据框。使用一个目标变量和多个回归器运行 OLS 回归没有问题。但是我对这部分代码有疑问。

所以,这是我的代码:


import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR

sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X)
y = sc_y.fit_transform(y)

y_pred = sc_y.inverse_transform ((regressor.predict (sc_X.transform(np.array([[6.5]])))))
plt.scatter(X, y, color = 'magenta')
plt.plot(X, regressor.predict(X))
plt.title('SVR')
plt.xlabel('X')
plt.ylabel('VF')
plt.show()

X_grid = np.arange(min(X), max(X), 0.1)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(X, y)
plt.plot(X_grid, regressor.predict(X_grid))
plt.title('SVR')
plt.xlabel('X')
plt.ylabel('VF')
plt.show()

我收到以下错误消息:“ValueError: Expected 2D array, got 1D array instead 如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 重塑您的数据,如果它包含单个样本,则使用 array.reshape(1, -1)。"

这是我第一次遇到这个问题。我在其他主题中看到的并不稀缺,但实际上我不明白在哪里重塑我的代码中的数据。当我尝试这样做时,它说 DataFrame 没有重塑功能。

这是我的数据集的图片。目标是 VF,所有其他变量都是回归量。

谢谢,

【问题讨论】:

  • 发布一些数据来重现这个
  • 我放了一张我的数据集的图片,以便向您展示结构。这是一个很大的值,有超过 25.000 个值。
  • X.shape 返回什么?
  • 返回 (14085, 8)。我对上面的评论犯了一个错误,我有 14085 个意见。
  • np.arange(min(X), max(X), 0.1) 返回一维数组,而不是二维数组。

标签: python arrays numpy scikit-learn regression


【解决方案1】:

似乎当你这样做时:

 X = sc_X.fit_transform(X)

X 包含多个变量。 8具体

接下来你要做的:

 regressor.predict(sc_X.transform(np.array([[6.5]])))

现在您尝试转换一个新样本,该样本只有一个变量,但 sc 模型是在具有多个变量的数据上训练的。

【讨论】:

  • 是的,这正是重点。那我该如何解决这个问题呢?
  • 您必须定义一个也有 8 个特征的样本,或者仅使用 X 中的一个变量来拟合 sc 模型
  • 修改代码后,我有这个新的错误信息:non-broadcastable output operand with shape (1,1) doesn't match the broadcast shape (1,2)
猜你喜欢
  • 2018-12-11
  • 2021-12-29
  • 1970-01-01
  • 2020-12-18
  • 2018-09-16
  • 2018-12-21
  • 2020-03-03
  • 2019-06-06
相关资源
最近更新 更多