SCI图表复现:测试数据与模型预测置信区间的高级可视化策略

关系型数据库机器学习云安全

picture.image

背景

在机器学习的应用中,回归任务是一类非常常见的问题,通常用于预测连续的数值输出,为了更好地理解模型的表现,除了给出预测的结果之外,绘制预测的置信区间也十分有用,本文将向大家介绍如何使用 XGBoost 进行回归预测,并通过可视化展示预测结果和置信区间

picture.image

本文的可视化灵感来源于某SCI文献中的方法,结果如图,该文献通过展示测试数据、预测均值及其置信区间的图表,有效地传达了模型预测的不确定性,在他们的图表中,测试数据通过离散点表示,预测均值通过平滑曲线显示,而不同标准差范围内的置信区间则通过不同透明度的渐变色块呈现

点赞 在看 转发参与免费包邮赠书活动

代码实现

数据生成


          
import pandas as pd
          
import numpy as np
          
import matplotlib.pyplot as plt
          
from sklearn.model_selection import train_test_split
          
# 为了增加复杂度,生成多个特征,并使用 XGBoost 来进行回归建模和可视化
          
plt.rcParams['font.family'] = 'Times New Roman'
          
plt.rcParams['axes.unicode_minus'] = False
          
from sklearn.datasets import make_regression
          
import xgboost as xgb
          

          
# 生成多特征模拟数据集
          
n_samples = 200
          
n_features = 5
          
X_simulated, y_simulated = make_regression(n_samples=n_samples, n_features=n_features, noise=0.1, random_state=42)
      

生成一个具有200个样本和5个特征的模拟回归数据集,用于后续的XGBoost回归建模和可视化

模型训练


          
# 将模拟数据分为训练集和测试集
          
X_train_simulated, X_test_simulated, y_train_simulated, y_test_simulated = train_test_split(X_simulated, y_simulated, test_size=0.25, random_state=42)
          

          
# 定义XGBoost模型
          
model_xgb_simulated = xgb.XGBRegressor(
          
    learning_rate=0.02,
          
    booster='gbtree',
          
    objective='reg:squarederror',
          
    max_leaves=127,
          
    verbosity=0,
          
    seed=42,
          
    colsample_bytree=0.6,
          
    subsample=0.7
          
)
          

          
# 训练XGBoost模型
          
model_xgb_simulated.fit(X_train_simulated, y_train_simulated)
          

          
# 在测试集上进行预测
          
y_pred_simulated = model_xgb_simulated.predict(X_test_simulated)
      

将数据分为训练集和测试集,定义并训练了一个XGBoost回归模型

模型预测及置信区间计算


          
# 在测试集上进行预测
          
y_pred_simulated = model_xgb_simulated.predict(X_test_simulated)
          

          
# 计算残差和标准差
          
residuals_simulated = y_test_simulated - y_pred_simulated
          
sigma_simulated = np.std(residuals_simulated)
          

          
# 计算三种置信区间
          
conf_intervals_simulated = {
          
    'mu ± sigma': (y_pred_simulated - sigma_simulated, y_pred_simulated + sigma_simulated),
          
    'mu ± 2sigma': (y_pred_simulated - 2*sigma_simulated, y_pred_simulated + 2*sigma_simulated),
          
    'mu ± 3sigma': (y_pred_simulated - 3*sigma_simulated, y_pred_simulated + 3*sigma_simulated),
          
}
      

在模型训练完成后,在测试集上进行预测,并计算每个样本的残差和标准差,最终计算三种置信区间

可视化预测结果及置信区间


          
# 绘制可视化图像
          
test_indices_simulated = np.arange(len(y_test_simulated))
          

          
plt.figure(figsize=(10, 5), dpi=1200)
          

          
# 绘制测试数据
          
plt.scatter(test_indices_simulated, y_test_simulated, color='red', label='Test data', zorder=5)
          

          
# 绘制预测均值
          
plt.plot(test_indices_simulated, y_pred_simulated, color='blue', label='prediction, $\\mu$', zorder=4)
          

          
# 绘制三种置信区间
          
plt.fill_between(test_indices_simulated, conf_intervals_simulated['mu ± sigma'][0], conf_intervals_simulated['mu ± sigma'][1], 
          
                 color='navy', alpha=0.6, label='$\\mu \\pm \\sigma$')
          
plt.fill_between(test_indices_simulated, conf_intervals_simulated['mu ± 2sigma'][0], conf_intervals_simulated['mu ± 2sigma'][1], 
          
                 color='deepskyblue', alpha=0.5, label='$\\mu \\pm 2\\sigma$')
          
plt.fill_between(test_indices_simulated, conf_intervals_simulated['mu ± 3sigma'][0], conf_intervals_simulated['mu ± 3sigma'][1], 
          
                 color='lightblue', alpha=0.3, label='$\\mu \\pm 3\\sigma$')
          

          
# 设置图表标题和标签
          
plt.title('Test Data with Prediction and Confidence Intervals (XGBoost Model)')
          
plt.xlabel('Test Sample')
          
plt.ylabel('Simulated Output')
          
plt.legend()
          
plt.savefig("Test Data with Prediction and Confidence Intervals (XGBoost Model).pdf",bbox_inches='tight')
          
# 显示图像
          
plt.show()
      

picture.image

通过 matplotlib 来绘制散点图和填充区域,图中展示了测试数据、预测值以及三个不同置信区间的区域, 在上图中: 红色的散点代表测试数据的真实值、 蓝色的曲线代表模型的预测值、 不同的蓝色阴影区域分别表示置信区间,其中深蓝色表示 ,天蓝色表示 ,浅蓝色表示 ,通过这样的可视化,可以清晰地看到模型预测结果的准确度以及模型预测的置信度

往期推荐

SCI图表复现:整合数据分布与相关系数的高级可视化策略

复现顶刊Streamlit部署预测模型APP

树模型系列:如何通过XGBoost提取特征贡献度

树模型系列:如何通过随机森林提取特征贡献度

树模型系列:如何通过LightGBM提取特征贡献度

不止 SHAP 力图:LIME 实现任意黑盒模型的单样本解释

特征选择:Lasso和Boruta算法的结合应用

从基础到进阶:优化SHAP力图,让样本解读更直观

用图表说话:如何有效呈现回归预测模型结果

多模型中的特征贡献度比较与可视化图解

picture.image

picture.image

picture.image

微信号|deep_ML

欢迎添加作者微信进入Python、ChatGPT群

进群请备注Python或AI进入相关群
无需科学上网、同步官网所有功能、使用无限制

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生可观测性技术的落地实践
云原生技术和理念在近几年成为了备受关注的话题。应用通过云原生改造,变得更动态、弹性,可以更好地利用云的弹性能力。但是动态、弹性的环境也给应用以及基础设施的观测带来了更大的挑战。本次分享主要介绍了云原生社区中可观测性相关的技术和工具,以及如何使用这些工具来完成对云原生环境的观测。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论