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

sun*_*nny 97 scikit-learn

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

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)
Run Code Online (Sandbox Code Playgroud)

产生:

ValueError: Found arrays with inconsistent numbers of samples: [  1 999]
Run Code Online (Sandbox Code Playgroud)

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

Yul*_*Yul 114

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

data=data.reshape((999,1))
Run Code Online (Sandbox Code Playgroud)

就我而言,它适用于此.

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

小智 24

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

您还可以执行以下操作:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())
Run Code Online (Sandbox Code Playgroud)

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


xil*_*lef 11

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

df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这确实是最简单,最容易理解的! (2认同)

Ani*_*ish 5

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

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)
Run Code Online (Sandbox Code Playgroud)