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

时间:2016-01-18 16:48:18

标签: 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 ,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]

知道我提出的基本错误是什么?

1 个答案:

答案 0 :(得分:1)

sklearn模型期望X数据(预测变量)为形状的二维数据(n_samples,n_features)。
因此,在这种情况下,您可以通过执行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']]是指定您想要选择与此列名列表对应的数据帧子集的pandas方式(在您的情况下是一个元素的列表),而不是data['X'],而只是将一列作为一个系列返回:

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

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