Numpy 将线性回归模型拟合到CSV矩阵

Numpy 将线性回归模型拟合到CSV矩阵,numpy,pandas,scikit-learn,Numpy,Pandas,Scikit Learn,我正在使用季度数据矩阵: Qtrs,Y,X,,, 1Q11, 252.0 , 0.0166 ,1,0,0 2Q11, 212.4 , 0.0122 ,0, 1 ,0 3Q11, 425.9 , 0.0286 ,0,0, 1 4Q11, 522.3 , 0.0322 ,0,0,0 1Q12, 263.2 , 0.0185 ,1,0,0 2Q12, 238.6 , 0.0131 ,0, 1 ,0 3Q12, 411.3 , 0.0270 ,0,0, 1 4Q12, 538.4 , 0.0343

我正在使用季度数据矩阵:

Qtrs,Y,X,,,
1Q11, 252.0 , 0.0166 ,1,0,0
2Q11, 212.4 , 0.0122 ,0, 1 ,0
3Q11, 425.9 , 0.0286 ,0,0, 1 
4Q11, 522.3 , 0.0322 ,0,0,0
1Q12, 263.2 , 0.0185 ,1,0,0
2Q12, 238.6 , 0.0131 ,0, 1 ,0
3Q12, 411.3 , 0.0270 ,0,0, 1 
4Q12, 538.4 , 0.0343 ,0,0,0
1Q13, 272.0 , 0.0180 ,1,0,0
2Q13, 212.3 , 0.0122 ,0, 1 ,0
3Q13, 405.2 , 0.0257 ,0,0, 1 
4Q13, 495.8 , 0.0308 ,0,0,0
1Q14, 264.5 , 0.0179 ,1,0,0
2Q14, 211.2 , 0.0116 ,0, 1 ,0
我正在使用以下代码读取csv数据文件并拟合模型:

import pandas as pd
from sklearn.linear_model import LinearRegression

data = pd.read_csv('C:/Filepath/Macro.csv')
regressor = LinearRegression()
regressor.fit(data['X'], data['Y'])
但是,我在执行代码时遇到的错误是:

ValueError: Found arrays with inconsistent numbers of samples: [ 1 14]

知道我犯了什么基本错误吗

sklearn模型期望
X
数据(预测变量)是形状的二维数据(n_样本,n_特征)。
因此,在本例中,您可以通过执行
data[['X']]
而不是
data['X']]
将X数据作为数据帧传递:

In [24]: regressor.fit(data[['X']], data['Y'])
Out[24]: LinearRegression(copy_X=True, fit_intercept=True, normalize=False)
作为双方括号的解释:
data[['X']]
是指定要选择与此列名列表(在您的示例中为一个元素的列表)对应的数据帧子集的一种方法,而不是仅将该列作为序列返回的
data['X']

In [27]: data['X'].shape
Out[27]: (14L,)

In [28]: data[['X']].shape
Out[28]: (14, 1)

谢谢@Joris。为了澄清答案,如果我有多个预测变量(比如X后面的3列),我可以使用[X]而不是[[X]]。换句话说,我如何将接下来的3个预测器变量列包含为预测器?为什么不将Y变量也包含在双括号[[Y]]中?在第一个问题上,您可以使用相同的语法(在
[]
getter中列出列名),但随后使用多个列,这将给出:
数据[['col1',col2',col3']]
关于你的第二个问题:这也行(你可以试试),但不需要,因为如果你有一个目标变量,那么
y
应该是一维的(因此sklearn会识别这种情况)