python-3.x ValueError:应为2D数组,但得到的却是1D数组:

js4nwp54  于 2023-06-07  发布在  Python
关注(0)|答案(8)|浏览(599)

在练习简单线性回归模型时,我得到了这个错误,我认为我的数据集有问题。
Here is my data set:
Here is independent variable X:
Here is dependent variable Y:
Here is X_train
Here Is Y_train
这是错误正文:

ValueError: Expected 2D array, got 1D array instead:
array=[ 7.   8.4 10.1  6.5  6.9  7.9  5.8  7.4  9.3 10.3  7.3  8.1].
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 pandas as pd
import matplotlib as pt

#import data set

dataset = pd.read_csv('Sample-data-sets-for-linear-regression1.csv')
x = dataset.iloc[:, 1].values
y = dataset.iloc[:, 2].values

#Spliting the dataset into Training set and Test Set
from sklearn.cross_validation import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size= 0.2, random_state=0)

#linnear Regression

from sklearn.linear_model import LinearRegression

regressor = LinearRegression()
regressor.fit(x_train,y_train)

y_pred = regressor.predict(x_test)

谢谢你

v2g6jxz6

v2g6jxz61#

你需要给予fitpredict两个方法2D数组。您的x_trainx_test当前仅为一维。控制台建议的操作应该有效:

x_train= x_train.reshape(-1, 1)
x_test = x_test.reshape(-1, 1)

这使用numpy的reshape来转换数组。例如,x = [1, 2, 3]可以被转换为矩阵x' = [[1], [2], [3]](-1给出矩阵的x维,从数组的长度和剩余维度推断,1是y维-给出一个n x 1矩阵,其中n是输入长度)。
关于reshape的问题已经在过去得到了回答,例如,这应该回答reshape(-1,1)的全部含义:What does -1 mean in numpy reshape?(下面的一些答案也很好地解释了这一点)

ryhaxcpt

ryhaxcpt2#

很多时候在做线性回归问题的时候,人们喜欢想象这个图

在输入上,我们有一个X = [1,2,3,4,5]的X
然而,许多回归问题具有多维输入。以房价预测为例。这不是决定房价的一个属性。它具有多种功能(例如:房间数量、位置等。)
如果查看文档,您将看到以下

它告诉我们行由样本组成,而列由特征组成。

然而,考虑一下当我们有一个特征作为输入时会发生什么。然后我们需要一个n x 1维的输入,其中n是样本的数量,第1列表示我们唯一的特征。
为什么array.reshape(-1, 1)建议有效?-1表示根据所提供的列数选择有效的行数。请参见下图了解它在输入中的变化。

eqoofvh9

eqoofvh93#

如果您查看LinearRegression of scikit-learn的文档。
fit(X,y,sample_weight=None)
X:numpy数组或shape [n_samples,n_features]的稀疏矩阵
预测(X)
X:{类数组,稀疏矩阵},形状=(n_samples,n_features)
正如你所看到的,X有2个维度,而as,你的x_trainx_test显然只有一个维度。按照建议,增加:

x_train = x_train.reshape(-1, 1)
x_test = x_test.reshape(-1, 1)

在拟合和预测模型之前。

nsc4cvqm

nsc4cvqm4#

使用

y_pred = regressor.predict([[x_test]])
vlurs2pr

vlurs2pr5#

我建议在开始时重塑X,然后再将其拆分为训练和测试数据集:

import pandas as pd
import matplotlib as pt

#import data set

dataset = pd.read_csv('Sample-data-sets-for-linear-regression1.csv')
x = dataset.iloc[:, 1].values
y = dataset.iloc[:, 2].values
# Here is the trick
x = x.reshape(-1,1)

#Spliting the dataset into Training set and Test Set
from sklearn.cross_validation import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size= 0.2, random_state=0)

#linnear Regression

from sklearn.linear_model import LinearRegression

regressor = LinearRegression()
regressor.fit(x_train,y_train)

y_pred = regressor.predict(x_test)
gajydyqb

gajydyqb6#

这是我用的

X_train = X_train.values.reshape(-1, 1)
y_train = y_train.values.reshape(-1, 1)
X_test = X_test.values.reshape(-1, 1)
y_test = y_test.values.reshape(-1, 1)
62lalag4

62lalag47#

这就是解决办法

regressor.predict([[x_test]])

对于多项式回归:

regressor_2.predict(poly_reg.fit_transform([[x_test]]))
vxqlmq5t

vxqlmq5t8#

修改

regressor.fit(x_train,y_train)
y_pred = regressor.predict(x_test)

regressor.fit(x_train.values.reshape(-1,1),y_train)
y_pred = regressor.predict(x_test.values.reshape(-1,1))

相关问题