如何在keras模型中获得置信区间?

o4tp2gmn  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(392)

我目前为timeseries预测建立了keras lstm模型。我对模型做了拟合数据并做了一些预测。我还输出了rmse值(如果有帮助的话)。
如何计算预测的置信区间?非常感谢。

  1. def fit_model(train, batch_size, num_epochs, neurons):
  2. X, y = train[:, 0:-1], train[:, -1]
  3. X = X.reshape(X.shape[0], 1, X.shape[1])
  4. model = Sequential()
  5. model.add(LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True))
  6. model.add(Dense(1))
  7. model.compile(loss='mean_squared_error', optimizer='adam')
  8. for i in range(num_epochs):
  9. model.fit(X, y, epochs=1, batch_size=batch_size, verbose=0, shuffle=False)
  10. model.reset_states()
  11. return model
  12. error_scores = list()
  13. repeats = 5
  14. for r in range(repeats):
  15. # fit the model
  16. batch_size = 1
  17. epochs = 200
  18. model = fit_model(train_scaled, batch_size, epochs, neurons)
  19. # forecast the entire training dataset to build up state for forecasting
  20. train_reshaped = train_scaled[:, 0].reshape(len(train_scaled), 1, 1)
  21. model.predict(train_reshaped, batch_size=batch_size)
  22. # forecast test dataset
  23. test_reshaped = test_scaled[:, 0].reshape(len(test_scaled), 1, 1)
  24. output = model.predict(test_reshaped, batch_size=batch_size)
  25. predictions = list()
  26. for i in range(len(output)):
  27. # make one-step forecast
  28. yhat = output[i,0]
  29. X = test_scaled[i, 0:-1]
  30. # invert scaling
  31. yhat = invert_scale(scaler, X, yhat)
  32. # invert differencing
  33. yhat = inverse_difference_series(raw_values, yhat, len(test_scaled)+1-i)
  34. # store forecast
  35. predictions.append(yhat)
  36. rmse = sqrt(mean_squared_error(raw_values[-80:], predictions))
  37. print('%d) Test RMSE: %.3f' % (r+1, rmse))
  38. error_scores.append(rmse)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题