python - 在 Python 中绘制 GP 95% 置信区间
问题描述
我使用高斯过程回归来拟合我的数据并且效果很好。但是,当我试图根据我的估计绘制置信区间时。我得到一个凌乱的图表,见下文。
红线代表CI上限,蓝线代表CI下限,黑线是我的估计数据。我为此编写了以下代码
f3 = plt.figure()
plt.plot(X_te_rescale[:,0],pred_y.ravel(),'k.',markersize=20,label='prediction')
plt.plot(X_te_rescale[:,0],low_CIs,'b.',markersize=2)
plt.plot(X_te_rescale[:,0],Upper_CIs,'r.',markersize=2)
plt.legend(loc='1')
plt.show()
我在 google 中搜索,发现fill between
它对此很有用,因此也使用了它,结果也很糟糕。见下图
主要 GP 代码
pred_y, sigma = gpr.predict(X_te_rescale, return_std=True)
confidence_interval = sigma * 1.96
low_CIs=pred_y - confidence_interval
Upper_CIs= pred_y + confidence_interval
我为此编写的代码如下
plt.scatter(X_tr_rescale, y_tr_rescale, label='Train data')
plt.fill_between(X_te_rescale[:,0],
pred_y[:,0] - confidence_interval,
pred_y[:,0] + confidence_interval,
facecolor='black', alpha=0.5, label='95% confidence interval')
plt.gca().set_title(gp.kernel_)
plt.plot(X_te_rescale, pred_y, 'r.',label='Prediction')
数据详情如下。
y_te_rescale: Array of floats64 (1188,1)
sigma: Array of floats64 (1188,)
Confidence interval: Array of floats64 (1188,)
lower CIs: Array of floats64 (1188,1188)
upper CIs: Array of floats64 (1188,1188)
pred_y: Array of floats64 (1188,1)
是否有可能有一个不与我的估计值重叠的 CI?或者我想念的东西。提前致谢。根据评论我修改了代码如下
x_unsorted=X_te_rescale.flatten()
pred_y=pred_y.flatten()
sorted_inds = np.argsort(x_unsorted)
plt.fill_between(
x_unsorted[sorted_inds],
(pred_y - confidence_interval)[sorted_inds],
(pred_y+ confidence_interval)[sorted_inds],
label='95% CI',
)
plt.plot(
x_unsorted[sorted_inds],
pred_y.ravel[sorted_inds],
'r--',
label='Prediction',
)
这给出了如下图
上面的代码虽然显示了置信区间但无法估计值。这段代码是否正确?或者如何将置信区间与可以清楚地看到的估计值一起绘制。
解决方案
您使用的问题plt.fill_between
是 x 值未排序。plt.plot
如果您绘制的是一条线而不是一组点,则会产生同样糟糕的结果。
尝试这样的事情:
sorted_inds = np.argsort(x_unsorted)
plt.fill_between(
x_unsorted[sorted_inds],
(y_pred - conf_intervals)[sorted_inds],
(y_pred + conf_intervals)[sorted_inds],
label='95% CI',
)
plt.plot(
x_unsorted[sorted_inds],
y_pred[sorted_inds],
'k-',
label='Prediction',
)
推荐阅读
- ssl - 如何在 nginx 中编写带有动态 SSL 证书的模块?
- laravel - 没有可验证用户的 Laravel 护照
- vue.js - 如何在 vue 组件单一文件中使用外部 script.js 中的变量
- firebase - 定义 Firestore 文档 ID 的可接受的词典相似性
- python - 如何矢量化 pandas iterrows 循环
- laravel - 将具有许多连接的复杂 SQL 查询转换为 Eloquent
- asp.net-core - 如何使用 blazor 使用当地文化格式化日期
标签 - docker - 在服务器重新启动后尝试设置数据持久性时,所有容器的状态都已退出(255)
- revit - 房间分隔功能有自动解决方案吗?
- c - 我需要重新初始化 epoll_wait 的事件数组吗?