【问题标题】:Fitting a linear regression model to a CSV matrix将线性回归模型拟合到 CSV 矩阵
【发布时间】:2016-04-23 22:20:56
【问题描述】:

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

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]

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

【问题讨论】:

    标签: numpy pandas scikit-learn


    【解决方案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)
    

    【讨论】:

    • 谢谢@Joris。只是为了澄清答案,如果我有多个预测变量(比如 X 之后的下 3 列),我可以使用 [X] 而不是 [[X]]。换句话说,我如何将接下来的 3 个预测变量列包含为预测变量?
    • 为什么不在双括号 [[Y]] 中也包含 Y 变量?
    • 在您的第一个问题上,您可以使用相同的语法([] getter 中的列名列表),但随后使用多个列,即:data[['col1', 'col2', 'col3']]
    • 关于你的第二个问题:这也可以工作(你可以尝试),但不是必需的,因为如果你有一个目标变量,y 预计是一维的(所以 sklearn 会认识到这一点案例)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2018-10-13
    • 1970-01-01
    相关资源
    最近更新 更多