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

Scikit learn sklearn:调用LinearRegression.fit()时发现数组的样本数不一致,scikit-learn,Scikit Learn,我只是试着做一个简单的线性回归,但我对这个错误感到困惑: 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数组,那么我缺少什么呢 看起来sklearn需要的

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

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数组,那么我缺少什么呢

看起来sklearn需要的数据形状为(行号、列号)。 如果数据形状是(行号),如
(999,)
,则它不起作用。 通过使用
numpy.reformate()
,您应该将数组的形状更改为
(999,1)
,例如使用

data=data.reshape((999,1))
在我的情况下,这是有效的

我认为regr.fit的“X”参数需要是一个矩阵,所以下面应该可以

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)
尝试将您的功能放在一个元组中,如下所示:

features = ['TV', 'Radio', 'Newspaper'] X = data[features] 功能=[“电视”、“收音机”、“报纸”]
X=data[features]看起来您正在使用熊猫数据帧(来自名称df2)

您还可以执行以下操作:

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

注意:我删除了将pandas系列转换为numpy.ndarray的“值”,而numpy.ndarray没有_frame()属性。

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

值错误:
regr.fit(np.array(x\u列表)、np.array(y\u列表))

正确:
regr.fit(np.transpose(np.matrix(x_列表)),np.transpose(np.matrix(y_列表)))
要分析两个数组(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是数组中的项数。 要为阵列1提供正确数量的轴,请执行以下操作:

array1 = array1[:, numpy.newaxis]

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

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

<>你的数据文件将被转换成一个已知维度的数组,你不必在UDAQUEST学习基础课程上看到它

< P>:

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

我面临着类似的问题。在我的例子中,问题是,X中的行数不等于y中的行数


i、 e.功能列中的条目数不等于目标变量中的实体数,因为我从功能列中删除了一些行。

在列车测试拆分期间,您可能会犯错误

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)

有几天我也面临同样的问题。原因是数组大小不同。

我的数据形状是(10L,),如何将其转换为(10L,1)。当我使用data=data.reforme(len(data),1)时,生成的形状是(10L,1L)而不是(10L,1)@user3841581请参考此内容。@Boern感谢您的评论。我还发现,X_列的大小应该是(N,1),但y_列的大小应该是(N,)而不是(N,1),否则它不起作用,至少对我来说不起作用。数据。如果数据是序列对象,重塑(…)可能会显示去润滑警告。使用data.values.reformate(…)data=data.reformate(-1,1)谢谢!这真的是最简单、最容易理解的!实际上,Y参数应为(长度,)形状。谢谢
x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)