我是机器学习的新手,第一次在我的电脑上尝试使用简单线性回归。我遇到了一个错误,提示值错误:期望二维数组但得到一维数组。
我不知道该怎么办。任何关于修复此代码的建议都会有所帮助。
import numpy as npimport matplotlib as pltimport pandas as pd#准备数据集dataset = pd.read_csv("Salary_Data.csv")X = dataset.iloc[:,0].valuesY = dataset.iloc[:,1].values#缺失值处理#编码#拆分数据集from sklearn.model_selection import train_test_splitX_train,X_test,Y_train,Y_test = train_test_split(X,Y, test_size = 1/3, random_state = 0)#格式缩放#简单线性回归from sklearn.linear_model import LinearRegressionregressor = LinearRegression()regressor.fit(X_train,Y_train)
我得到的错误是:
regressor.fit(X_train,Y_train)Traceback (most recent call last): File "<ipython-input-10-4d17c24ccad2>", line 1, in <module> regressor.fit(X_train,Y_train) File "C:\Users\home\Anaconda\lib\site-packages\sklearn\linear_model\base.py", line 458, in fit y_numeric=True, multi_output=True) File "C:\Users\home\Anaconda\lib\site-packages\sklearn\utils\validation.py", line 756, in check_X_y estimator=estimator) File "C:\Users\home\Anaconda\lib\site-packages\sklearn\utils\validation.py", line 552, in check_array "if it contains a single sample.".format(array))ValueError: Expected 2D array, got 1D array instead:array=[ 2.9 5.1 3.2 4.5 8.2 6.8 1.3 10.5 3. 2.2 5.9 6. 3.7 3.2 9. 2. 1.1 7.1 4.9 4. ].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.
回答:
根据sklearn文档,LinearRegression::fit()
期望X
的形状为(n_samples, n_features)
,Y
的形状为(n_samples, n_targets)
。在讨论的案例中,我认为这应该对应于(20L, 1)
和(20L, )
(即一个长度为20的“行向量”和一个长度为20的“列向量”)。调用
X = dataset.iloc[:,0].values
产生了一个形状为(20L, )
的对象。因此,需要将其重塑为(20L, 1)
,这相当简单(实际上,这就是那个有点神秘的建议“使用array.reshape(-1, 1)
”想要告诉你的),
X = dataset.iloc[:,0].values.reshape(-1, 1)
正如@Dan所指出的,另一个合适的替代方案是
X = dataset.iloc[:,[0]].values
这两个选项都会产生一个形状为(20L, 1)
的对象,然后与形状为(20L, )
的Y
对象兼容。请注意,X_train
和Y_train
的形状分别反映了X
和Y
的形状。