只是尝试进行简单的线性回归,但我对此错误感到困惑:
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数组,所以我缺少什么?
答案 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)