【问题标题】:Python/Scikit-learn/regressions - from pandas Dataframes to Scikit predictionPython/Scikit-learn/regressions - 从 pandas Dataframes 到 Scikit 预测
【发布时间】:2016-04-01 19:11:33
【问题描述】:

我有以下 pandas DataFrame,名为 main_frame

            target_var  input1  input2  input3  input4  input5    input6
Date
2013-09-01        13.0     NaN     NaN     NaN     NaN     NaN       NaN   
2013-10-01        13.0     NaN     NaN     NaN     NaN     NaN       NaN   
2013-11-01        12.2     NaN     NaN     NaN     NaN     NaN       NaN   
2013-12-01        10.9     NaN     NaN     NaN     NaN     NaN       NaN   
2014-01-01        11.7       0      13      42       0       0        16   
2014-02-01        12.0      13       8      58       0       0        14   
2014-03-01        12.8      13      15     100       0       0        24   
2014-04-01        13.1       0      11      50      34       0        18   
2014-05-01        12.2      12      14      56      30      71        18   
2014-06-01        11.7      13      16      43      44       0        22   
2014-07-01        11.2       0      19      45      35       0        18   
2014-08-01        11.4      12      16      37      31       0        24   
2014-09-01        10.9      14      14      47      30      56        20   
2014-10-01        10.5      15      17      54      24      56        22   
2014-11-01        10.7      12      18      60      41      63        21   
2014-12-01         9.6      12      14      42      29      53        16   
2015-01-01        10.2      10      16      37      31       0        20   
2015-02-01        10.7      11      20      39      28       0        19   
2015-03-01        10.9      10      17      75      27      87        22   
2015-04-01        10.8      14      17      73      30      43        25   
2015-05-01        10.2      10      17      55      31      52        24

我在探索 Scikit-learn 上的数据集时遇到了麻烦,我不确定问题是否出在 pandas 数据集、作为索引的日期、NaN/Infs/Zeros(我不知道如何解决),一切,我无法追踪的其他事情。

我想构建一个简单的回归,以根据名为“Input”的变量(1、2、3..)预测下一个 target_var 项目。

请注意,时间序列中有很多零和 NaN,最终我们可能也会找到 Inf。

【问题讨论】:

    标签: python pandas scikit-learn linear-regression


    【解决方案1】:

    您应该首先尝试删除具有Inf-Inf 或 NaN 值的任何行(其他方法包括使用特征的平均值填充 NaN)。

    df = df.replace(to_replace=[np.Inf, -np.Inf], value=np.NaN)
    df = df.dropna()
    

    现在,创建一个包含特征的 numpy 矩阵和一个目标向量。鉴于您的目标变量位于第一列,您可以使用基于整数的索引,如下所示:

    X = df.iloc[:, 1:].values
    y = df.iloc[:, 0].values
    

    然后创建并拟合您的模型:

    from sklearn.linear_model import LinearRegression
    
    model = LinearRegression()
    model.fit(X=X, y=y)
    

    现在您可以观察您的估计:

    >>> model.intercept_
    12.109583092421092
    
    >>> model.coef_
    array([-0.05269033, -0.17723251,  0.03627883,  0.02219596, -0.01377465,
            0.0111017 ])
    

    【讨论】:

    • 在上面的例子中 X=main_frame.input1[:,1:].values 和 y=main_frame.target_var[:,0].values 对吧?
    • df 只是数据框的通用术语。在您的情况下,您可以将其替换为 main_frame。使用iloc(索引位置)代替input1target_var
    • 您介意在您的答案中添加一种将其与 X 和 y 一起绘制的方法吗?
    • 1) 每个帖子只有一个问题。 2) X 是一个有 6 列的数组,你期待什么?
    • @trench 是的,应该是y = -.0.05input1 - 0.177input2 + 0.05input3 + 0.02input4 -0.01input5 + 0.01input6 + 12.11
    猜你喜欢
    • 2015-03-11
    • 2017-05-07
    • 2016-04-03
    • 2016-02-09
    • 2015-12-19
    • 2018-01-09
    • 2018-06-27
    • 2015-01-12
    • 2021-05-25
    相关资源
    最近更新 更多