sklearn:调用LinearRegression.fit()时发现数组的样本数不一致


102

只是想做一个简单的线性回归,但我对此错误感到困惑:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)

产生:

ValueError: Found arrays with inconsistent numbers of samples: [  1 999]

这些选择必须具有相同的尺寸,并且它们应该是numpy数组,所以我缺少什么?

Answers:


116

看起来sklearn需要(​​行号,列号)的数据形状。如果您的数据形状像(行号)一样(999, ),则无法使用。通过使用numpy.reshape(),您应将数组的形状更改为(999, 1),例如使用

data=data.reshape((999,1))

就我而言,它可以解决这个问题。


6
我的数据形状为(10L,),如何将其转换为(10L,1)。当我使用data = data.reshape(len(data),1)时,得到的形状是(10L,1L)而不是(10L,1)
user3841581 2015年

@ user3841581请参阅这篇文章
刘Liu

1
@Boern感谢您的评论。我还发现X_train的大小应为(N,1),而y_train的大小应为(N,)而不是(N,1),否则它不起作用,至少对我来说不行。
CrossEntropy

如果数据是Series对象,则data.reshape(...)可能显示贬低警告。Use data.values.reshape(...)
NightFurry 17-10-26

data = data.reshape(-1,1)
Itachi,

24

看起来您正在使用pandas数据框(名称为df2)。

您还可以执行以下操作:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())

注意:我删除了“值”,因为它将大熊猫系列转换为numpy.ndarray,而numpy.ndarray没有属性to_frame()。


11

在Udacity深度学习基础课程上看到:

df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])

2
谢谢!这确实是最简单,最容易理解的!
Juan A. Navarro

实际上,Y参数应为(长度)形状。谢谢!
Michael_Zhang

5

我认为regr.fit的“ X”参数必须是一个矩阵,因此以下内容应该有效。

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)

4

我遇到此错误是因为我将数据转换为np.array。我通过将数据转换为a np.matrix并进行转置来解决了这个问题。

ValueError: regr.fit(np.array(x_list), np.array(y_list))

正确: regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))


2
expects X(feature matrix)

尝试将功能放在这样的元组中:

功能= ['电视','广播','报纸']
X =数据[功能]

1

我遇到了类似的问题。我的问题是,X中的行数不等于y中的行数。

即特征列中的条目数不等于目标变量中的整体数,因为我从特征列中删除了一些行。


0

要分析两个数组(array1和array2),它们需要满足以下两个要求:

1)他们必须是一个numpy.ndarray

检查与

type(array1)
# and
type(array2)

如果不是这样,那么至少其中一个执行

array1 = numpy.ndarray(array1)
# or
array2 = numpy.ndarray(array2)

2)尺寸需要如下:

array1.shape #shall give (N, 1)
array2.shape #shall give (N,)

N是数组中项目的数量。要为array1提供正确数量的轴,请执行以下操作:

array1 = array1[:, numpy.newaxis]

0

如前所述,X参数必须是具有已知维数的矩阵或numpy数组。因此,您可能可以使用以下代码:

df2.iloc[1:1000, 5:some_last_index].values

因此,您的数据框将被转换为具有已知尺寸的数组,而您无需对其进行整形


-1

在火车试车时,您可能做错了

x_train,x_test,y_train,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)

上面的代码是正确的

您可能像下面这样做了,这是错误的

x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.