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会识别这种情况)