【问题标题】:How to predict missing values in python using linear regression 3 year worth of data如何使用线性回归 3 年的数据预测 python 中的缺失值
【发布时间】:2019-02-01 08:15:47
【问题描述】:

大家好,我有这 3 年的 2012~2014 年数据,但是 2014 年有一个缺失值(100 行),我真的不太确定如何处理它,这是我的尝试一下:

X = red2012Mob.values
y = red2014Mob.values
X = X.reshape(-1,1)
y = y.reshape(-1,1)
from sklearn.model_selection import train_test_split  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)  
from sklearn.linear_model import LinearRegression  
regressor = LinearRegression()  
regressor.fit(X_train, y_train)  
y_pred = regressor.predict(X_test)  

我没有更改 2014 年的任何数据缺失值,我只是直接将其输入到模型中

【问题讨论】:

    标签: pandas numpy scikit-learn


    【解决方案1】:

    有两种方式:

    • 删除缺少数据的实例(例如,使用 red2012Mob.dropna(),或者如果是时间序列,则省略完整的缺失数据块,例如从 2014 年晚些时候开始)。
    • 估算缺失的数据。但是,在这里,您不会得到一刀切的答案,因为它实际上取决于您的数据和您的问题。由于您似乎有时间序列数据,因此“小”孔的最简单策略是我们线性或恒定的插值。如果时间依赖性不是那么重要,那么列的平均值可能是一个很好的策略。对于更大的孔,您可以找到合适的模型来填补数据。有时,使用之前使用相同价值的“天真”的策略(例如,上周一星期一的数据)可能会有效,或者您使用Knn Imprer(检查this Sklearn Pr或here) .对于简单的策略,在即将发布的sklearn release 中也有一个模块。

    在实践中,我通常会结合方法。例如,在某些时候,我会尝试第二点的策略,但如果数据太糟糕,通常最好使用较少的“好”数据而不是大部分估算数据。

    【讨论】:

      【解决方案2】:

      我不知道您是否有 2013 年的数据。如果它可用,我的第一个建议也是使用它。就训练数据而言,您应该只获取 2014 年具有非缺失值的数据,然后使用这些值拟合您的模型。一旦您在模型上获得了不错的交叉验证准确度,您就可以获取 2014 年缺失值的数据子集,并使用它来预测 2014 年的值。

      为了更好地理解,下面是一小段示例代码,用于对列表/列的非 nan 值进行子集化:

      将 numpy 导入为 np
      a1 = [v for v in a if not np.isnan(v)]

      【讨论】:

        猜你喜欢
        • 2019-02-01
        • 2022-11-11
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 2016-08-26
        • 2017-10-21
        • 2018-07-22
        • 1970-01-01
        相关资源
        最近更新 更多