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

时间:2015-06-12 22:26:58

标签: 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数组,所以我缺少什么?

11 个答案:

答案 0 :(得分:112)

看起来sklearn需要数据形状(行号,列号)。 如果您的数据形状为(行号),如(999, ),则无效。 使用numpy.reshape(),您应该更改为(999, 1),例如使用

data.reshape((999,1))

就我而言,它适用于此。

答案 1 :(得分:22)

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

您还可以执行以下操作:

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

注意:我已删除"值"因为它将pandas系列转换为numpy.ndarray,而numpy.ndarray没有属性to_frame()。

答案 2 :(得分:10)

见到Udacity深度学习基础课程:

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

答案 3 :(得分:5)

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

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

答案 4 :(得分:4)

我遇到此错误,因为我将数据转换为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)))

答案 5 :(得分:2)

expects X(feature matrix)

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

features = ['TV', 'Radio', 'Newspaper']
X = data[features]

答案 6 :(得分: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]

答案 7 :(得分:0)

如上所述,X参数必须是具有已知尺寸的矩阵或numpy数组。所以你可以使用它:

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

因此,您的数据框将转换为具有已知尺寸的数组,您无需重新塑造它

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

有时候,我遇到了同样的问题。原因是数组大小不同。

答案 10 :(得分:-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)