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

只是试图做一个简单的线性回归,但我很困惑这个错误:

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] 

这些select必须具有相同的维度,而且应该是numpy数组,所以我错过了什么?

它看起来像sklearn需要数据形状(行号,列号)。 如果您的数据形状是(行号),如(999, ) ,则不起作用。 通过使用numpy.reshape() ,你应该改变(999, 1) numpy.reshape() (999, 1) ,例如使用

 data.reshape((999,1)) 

在我的情况下,它的工作。

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

您也可以执行以下操作:

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

注意:我已经将“pandas Series”转换为numpy.ndarray并且numpy.ndarray没有属性to_frame()。

我认为regr.fit的“X”参数需要是一个matrix,所以下面的内容应该是有效的。

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

我遇到这个错误,因为我把我的数据转换为一个np.array 。 我通过将数据转换为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)))

 expects X(feature matrix) 

尝试把你的function放在这样一个元组中:

  features = ['TV','Radio','Newspaper']
 X =数据[function] 

正如上面提到的,X参数必须是一个matrix或具有已知维数的numpy数组。 所以你可以使用这个:

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

所以你的数据框会被转换成一个已知尺寸的数组,你不需要重新devise它

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

1)他们需要是一个numpy.ndarray

检查

 type(array1) # and type(array2) 

如果这不是至less其中一个performance的话

 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]