如何计算预测间隔?

时间:2020-04-01 04:48:30

标签: machine-learning regression prediction non-linear-regression

我最近参与了一个预测患者未来血糖值的项目。通过使用梯度提升算法,我能够获得较低的RMSE和MAE。但是,尽管误差很小,但预测值和实际值却有很大差异。例如,在下图中,蓝色线是实际的,而橙色线是预测的(使用Gradient Boosting算法)。

enter image description here

根据上述预测,很明显它并不那么准确。因此,我想以0.9的上限和0.1的下限来预测预测间隔,这样我就可以知道它们的下一个葡萄糖值将处于特定范围内。我在一篇文章中看到他们使用梯度提升算法来预测具有分位数损失函数的区间。我键入的用于预测预测间隔的代码如下,

LOWER_ALPHA = 0.1
UPPER_ALPHA = 0.9
lower_model = ensemble.GradientBoostingRegressor(loss="quantile",                   
                                alpha=LOWER_ALPHA)

upper_model = ensemble.GradientBoostingRegressor(loss="quantile",
                                alpha=UPPER_ALPHA)
lower_model.fit(X_train, y_train)
upper_model.fit(X_train, y_train)
predictions = pd.DataFrame(y_test)
predictions['lower'] = lower_model.predict(X_test)
predictions['upper'] = upper_model.predict(X_test)
plt.figure(figsize = (20,20))
plt.plot(predictions['lower'])
plt.plot(predicted)
plt.plot(predictions['upper'])

我得到的结果是,

enter image description here

但是我觉得我做错了什么。因为上限和下限之间的差距非常大,对于这种类型的预测,我们不需要机器学习。例如,如果我们查看第一个点,则上限位于215左右,下限位于60左右。因此,我可以告诉我的是,下一个值将位于60-215范围内。我做错了什么?有人可以建议一种更好的计算预测间隔的方法吗?预先感谢。

0 个答案:

没有答案