一图胜千言:回归预测模型训练集与测试集的进阶可视化

向量数据库大模型机器学习

picture.image

背景

在前两篇文章中,已经深入探讨了回归预测模型的性能评估与数据可视化益处,第一篇文章中——用图表说话:如何有效呈现回归预测模型结果,讲解如何通过精美的图表(散点图+边缘柱状图)展现模型的训练和测试结果(针对于回归预测模型)

picture.image

第二篇文章中——SCI图表复现:如何直观展示机器学习模型预测结果的准确性和一致性,则通过散点图结合1:1线、最佳拟合线、置信区间及R²和MAE指标,全方位直观展示模型预测准确性、趋势拟合程度和不确定性

picture.image

然而,真实数据的分布与模型预测结果的差异往往隐藏在更复杂的图表中,为了更全面地呈现训练集与测试集之间的关系,并直观展示预测值的置信区间及边缘分布,本篇文章将带大家深入理解一套综合性的可视化方案,本文集成置信区间与边缘柱状图的新图表形式,直观展示模型的拟合效果,如下:

picture.image

代码实现

数据读取


          
import pandas as pd
          
import numpy as np
          
import matplotlib.pyplot as plt
          
import seaborn as sns
          
from sklearn import metrics
          
import scipy.stats as stats
          
plt.rcParams['font.family'] = 'Times New Roman'
          
plt.rcParams['axes.unicode_minus'] = False
          

          
df_train = pd.read_excel('GBDT_train.xlsx')
          
df_test = pd.read_excel('GBDT_test.xlsx')
      

从 Excel 文件中分别加载训练数据 (GBDT_train.xlsx) 和测试数据 (GBDT_test.xlsx) 到数据框 (df_train 和 df_test) 中,里面包含真实值以及预测值

模型性能计算


          
from sklearn import metrics
          
# 真实
          
y_train = df_train['Experimental value']
          
y_test = df_test['Experimental value']
          
# 预测
          
y_pred_train = df_train['Predicted value']
          
y_pred_test = df_test['Predicted value']
          

          
y_pred_train_list = y_pred_train.tolist()
          
y_pred_test_list = y_pred_test.tolist()
          

          
# 计算训练集的指标
          
mse_train = metrics.mean_squared_error(y_train, y_pred_train_list)
          
rmse_train = np.sqrt(mse_train)
          
mae_train = metrics.mean_absolute_error(y_train, y_pred_train_list)
          
r2_train = metrics.r2_score(y_train, y_pred_train_list)
          

          
# 计算测试集的指标
          
mse_test = metrics.mean_squared_error(y_test, y_pred_test_list)
          
rmse_test = np.sqrt(mse_test)
          
mae_test = metrics.mean_absolute_error(y_test, y_pred_test_list)
          
r2_test = metrics.r2_score(y_test, y_pred_test_list)
          

          
print("训练集评价指标:")
          
print("均方误差 (MSE):", mse_train)
          
print("均方根误差 (RMSE):", rmse_train)
          
print("平均绝对误差 (MAE):", mae_train)
          
print("拟合优度 (R-squared):", r2_train)
          

          
print("\n测试集评价指标:")
          
print("均方误差 (MSE):", mse_test)
          
print("均方根误差 (RMSE):", rmse_test)
          
print("平均绝对误差 (MAE):", mae_test)
          
print("拟合优度 (R-squared):", r2_test)
      

picture.image

从训练集和测试集的数据中提取真实值 (Experimental value) 和预测值 (Predicted value),计算模型在训练集和测试集上的回归性能指标

文章一可视化


          
# 创建一个包含训练集和测试集真实值与预测值的数据框
          
data_train = pd.DataFrame({
          
    'True': y_train,
          
    'Predicted': y_pred_train,
          
    'Data Set': 'Train'
          
})
          

          
data_test = pd.DataFrame({
          
    'True': y_test,
          
    'Predicted': y_pred_test,
          
    'Data Set': 'Test'
          
})
          

          
data = pd.concat([data_train, data_test])
          

          
# 自定义调色板
          
palette = {'Train': '#b4d4e1', 'Test': '#f4ba8a'}
          

          
# 创建 JointGrid 对象
          
plt.figure(figsize=(8, 6), dpi=1200)
          
g = sns.JointGrid(data=data, x="True", y="Predicted", hue="Data Set", height=10, palette=palette)
          

          
# 绘制中心的散点图
          
g.plot_joint(sns.scatterplot, alpha=0.5)
          
# 添加训练集的回归线
          
sns.regplot(data=data_train, x="True", y="Predicted", scatter=False, ax=g.ax_joint, color='#b4d4e1', label='Train Regression Line')
          
# 添加测试集的回归线
          
sns.regplot(data=data_test, x="True", y="Predicted", scatter=False, ax=g.ax_joint, color='#f4ba8a', label='Test Regression Line')
          
# 添加边缘的柱状图
          
g.plot_marginals(sns.histplot, kde=False, element='bars', multiple='stack', alpha=0.5)
          

          
# 添加拟合优度文本在右下角
          
ax = g.ax_joint
          
ax.text(0.95, 0.1, f'Train $R^2$ = {r2_train:.3f}', transform=ax.transAxes, fontsize=12,
          
        verticalalignment='bottom', horizontalalignment='right', bbox=dict(boxstyle="round,pad=0.3", edgecolor="black", facecolor="white"))
          
ax.text(0.95, 0.05, f'Test $R^2$ = {r2_test:.3f}', transform=ax.transAxes, fontsize=12,
          
        verticalalignment='bottom', horizontalalignment='right', bbox=dict(boxstyle="round,pad=0.3", edgecolor="black", facecolor="white"))
          
# 在左上角添加模型名称文本
          
ax.text(0.75, 0.99, 'Model = GBDT', transform=ax.transAxes, fontsize=12,
          
        verticalalignment='top', horizontalalignment='left', bbox=dict(boxstyle="round,pad=0.3", edgecolor="black", facecolor="white"))
          

          
# 添加中心线
          
ax.plot([data['True'].min(), data['True'].max()], [data['True'].min(), data['True'].max()], c="black", alpha=0.5, linestyle='--', label='x=y')
          
ax.legend()
          
plt.savefig("TrueFalse.pdf", format='pdf', bbox_inches='tight')
          
plt.show()
      

picture.image

文章二基础可视化


          
plt.figure(figsize=(8, 6), dpi=1200)
          
plt.scatter(y_test, y_pred_test, color='coral', label="Predicted N₂O concentration", alpha=0.2)  # 预测值散点图
          
plt.plot(y_test, y_test, color='grey', alpha=0.6, label="1:1 Line")  # 1:1灰色虚线
          

          
# 拟合线
          
z = np.polyfit(y_test, y_pred_test, 1)
          
p = np.poly1d(z)
          
plt.plot(y_test, p(y_test), color='blue', alpha=0.6, 
          
         label=f"Line of Best Fit\n$R^2$ = {r2_test:.2f},MAE = {mae_test:.2f}")
          
plt.title("GBDT Regression")
          
plt.xlabel("Observed Values")
          
plt.ylabel("Predicted Values")
          
plt.legend(loc="upper left")
          
plt.savefig('1.pdf', format='pdf', bbox_inches='tight')
          
plt.show()
      

picture.image

集成置信区间与边缘柱状图

picture.image

通过多项式拟合计算训练集和测试集的预测值,并利用置信区间公式估算预测结果的不确定性,分别绘制训练集和测试集的拟合曲线、95%置信区间、散点图以及误差分布直方图,此外添加对角线(1:1参考线)以显示预测值与真实值的理想匹配,最终生成一张包含主要信息和辅助分布图的可视化图表,代码与数据集获取:如需获取本文完整的源代码和数据集,请添加作者微信联系

往期推荐

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

SCI图表:基于相关性和标准差的多模型评价——泰勒图解析

期刊文章配图:基于分组折线图的多机器学习模型表现评估对比

复现SCI文章 SHAP 依赖图可视化以增强机器学习模型的可解释性

SCI图表复现:优化SHAP特征贡献图展示更多模型细节

复现 Nature 图表——基于PCA的高维数据降维与可视化实践及其扩展

复现Nature图表——基于PCA降维与模型预测概率的分类效果可视化

SCI图表复现:特征相关性气泡热图展示

SCI图表复现:如何直观展示机器学习模型预测结果的准确性和一致性

期刊文章配图:基于雷达图的多机器学习模型表现评估对比

期刊文章配图:斯皮尔曼相关系数热图反应非线性变量相关性

picture.image

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

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论