如何使用线性回归3年的数据来预测python中的缺失值

时间:2018-08-26 16:48:55

标签: pandas numpy scikit-learn

伙计们,所以我有这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年以来缺少任何值的数据,我只是直接将其输入模型中

2 个答案:

答案 0 :(得分:3)

有两种方法:

  • 丢弃丢失数据的实例(例如,使用red2012Mob.dropna(),或者如果是时间序列,则忽略完整的丢失数据块,例如,从2014年下半年开始)。
  • 填充缺少的数据。但是,在这里,您将无法获得一个能解决所有问题的解决方案,因为它实际上取决于您的数据和问题。由于您似乎拥有时间序列数据,因此“小”孔的最简单策略是采用线性或恒定插值。如果时间依赖性不是那么重要,那么列均值可能是一个不错的策略。对于较大的孔,您可能会找到合适的模型来填充数据。有时可能会采用“天真”的策略,例如在之前使用相同的季节性值(例如,当前星期一的上周一数据),或者使用KNN Imputer(查看this sklearn PR或讨论的软件包{{ 3}})。对于简单的策略,即将到来的here中还有一个模块。

在实践中,我通常结合使用方法。例如,在某种程度上,我将尝试第二点的策略,但是如果数据太差,通常最好使“好”数据少于许多估算数据。

答案 1 :(得分:1)

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

为了更好地理解,这是一小段示例代码,用于为列表/列的非nan值提供子集:

将numpy导入为np
a1 = [如果不是np.isnan(v),则为v中的v]