【问题标题】:python - using linear regression to predict missing valuespython - 使用线性回归来预测缺失值
【发布时间】:2019-02-01 16:20:27
【问题描述】:

我有 2012-2014 年的数据,其中 2014 年缺少一些月份。我想使用基于 2012/2013 年数据训练的线性回归模型来预测这些月份。

2014 缺少 June-August 并以 '' 作为其值,因此我使用以下代码对其进行清理,我还通过切割 20 个数据将 2012,2013 更改为具有相同形状:

data2014NaN=data2014['mob'].replace(' ', np.nan)
data2014CleanNaN = data2014NaN[data2014NaN.notnull()]
data2012[0:300]
data2013[0:300]

然后我使用这两年作为训练集来训练线性回归模型。

X = pd.concat([data2012[0:300], data2013[0:300]], axis=1, join='inner')
y = data2014CleanNaN .values
y = y.reshape(-1,1)
from sklearn.model_selection import train_test_split  

# Split into 75% train and 25% test
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                    train_size=0.75,
                                                    random_state=4)  
lm = LinearRegression()
lm.fit(X_train,y_train)
score = lm.score(X_test,y_test)
print("The prediction score on the test data is {:.2f}%".format(score*100))

但是我得到的结果是糟糕的 4.65%,我不太确定如何解决这个问题,我认为我在减少 2012 年和 2013 年的数据时做错了

我在这里附上了数据(这只是虚拟数据):

2014:
date       value
29/01/2014 10
30/01/2014 20
31/01/2014 15
1/02/2014  ' '


2012:
date       value
29/01/2014 15
30/01/2014 18
31/01/2014 19
1/02/2014  50

我只是使用价值数据,不确定我是否在正确的方向

最好的问候

【问题讨论】:

  • 你能告诉我们data2012data2013data2014的样子吗?
  • 我想你试图预测的是时间的函数,所以你应该在x-axis 上有时间,在y-axis 上有时间。但在代码中,您似乎同时使用了 xy 轴的值。为什么?
  • 这需要更多解释。哪一列有缺失值?多个还是单个?你的数据是什么样的?为什么Xy 使用相似的数据?
  • 感谢您的评论,我添加了数据的样子
  • 如果将日期转换为“自开始以来的天数”,则日期列将变为回归或线性插值的数字数据。

标签: python pandas scikit-learn linear-regression predict


【解决方案1】:

看来你的R^2不太好。

在这种情况下,三次样条插值可能比线性回归表现更好。
在python中可以调用这个api:

 import scipy.interpolate as st

source

另外,如果 x 是时间戳并且 y 是一个值,您可以尝试时间序列分析(如 AR 或 ARMA)以及神经网络方法(如 RNN 和 LSTM)。

keras 构建的 LSTM 样本:

model = Sequential()
model.add(LSTM(activation='tanh',input_shape = dataX[0].shape, output_dim=5, return_sequences = False))
model.add(Dense(output_dim = 1))
model.compile(optimizer='adam', loss='mae',metrics=['mse']) 
model.fit(dataX , dataY, epochs = times , batch_size=1, verbose = 2,shuffle=False)
y_pred = model.predict(dataX)

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 2016-08-26
    • 2019-02-01
    • 1970-01-01
    • 2017-10-21
    • 2019-12-29
    • 1970-01-01
    • 2020-08-28
    • 2020-06-16
    相关资源
    最近更新 更多