期刊配图:带边际密度曲线的回归性能图可视化(附代码)

机器学习算法大模型

picture.image

✨ 欢迎关注Python机器学习AI ✨

本节介绍: 带边际密度曲线的回归性能图可视化(附代码) ,数据采用模拟数据无任何现实意义,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。完整数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的学习工具~!

✨ 论文信息 ✨

picture.image

文献中这组可视化图通过散点图展示了不同机器学习算法对PM₂.₅浓度的预测值与实际观测值的匹配情况,绿色实线为两者的线性拟合结果,黑色虚线为理想的1:1参考线,灰色边际曲线显示观测值和预测值的频率分布,图中附带的统计指标(如R²、MAE、RMSE)量化各模型的预测准确性与误差大小,帮助比较不同模型的性能表现,下图为模拟实现

picture.image

✨ 代码实现 ✨

  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
plt.rcParams['font.family'] = 'Times New Roman'  
plt.rcParams['axes.unicode_minus'] = False  
import warnings  
# 忽略所有警告  
warnings.filterwarnings("ignore")  
  
path = r"2025-12-18公众号Python机器学习AI.xlsx"  
df = pd.read_excel(path)  
from sklearn.model_selection import train_test_split  
  
# 划分特征和目标变量  
X = df.drop(['SR'], axis=1)    
y = df['SR']    
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(  
    X,    
    y,   
    test_size=0.3,   
    random_state=42  
)  
import xgboost as xgb  
from sklearn.model_selection import GridSearchCV, KFold  
  
# 定义回归模型  
model = xgb.XGBRegressor(  
    objective='reg:squarederror',    
    random_state=42  
)  
  
# 定义超参数网格  
param_grid = {  
    'max_depth': [3, 5, 7],  
    'learning_rate': [0.01, 0.1, 0.2],  
    'n_estimators': [50, 100, 200],  
    'subsample': [0.8, 1.0],  
    'colsample_bytree': [0.8, 1.0]  
}  
  
# 定义k折交叉验证  
kfold = KFold(n_splits=5, shuffle=True, random_state=42)  
  
# 定义网格搜索,使用负均方误差作为评分(sklearn里越大越好,负MSE)  
grid_search = GridSearchCV(  
    estimator=model,  
    param_grid=param_grid,  
    scoring='neg_mean_squared_error',  
    cv=kfold,  
    verbose=1,  
    n_jobs=-1  
)  
  
# 运行网格搜索  
grid_search.fit(X_train, y_train)  
# 使用最优模型预测测试集  
best_model = grid_search.best_estimator_

使用XGBoost回归模型结合五折交叉验证和网格搜索,对给定数据集的超参数进行调优,并基于最佳参数训练模型以预测目标变量

  
from scipy import stats  
from sklearn.metrics import mean_absolute_error, mean_squared_error  
  
def plot_and_save_performance(y_obs, y_pred, model_name="MLR",   
                              unit="$\mu$g/m$^3$",   
                              save_name="model_plot.pdf",  
                              label=""):  
    """  
    可视化回归性能并保存为 PDF  
  
    参数:  
    y_obs: 真实观测值 (array-like)  
    y_pred: 模型预测值 (array-like)  
    model_name: 模型名称 (如 "MLR", "RF")  
    unit: 物理量单位 (字符串,支持 LaTeX)  
    save_name: 保存的 PDF 文件名 (包含 .pdf 后缀)  
    label: 图像左上角的标识,默认为空 "",可传入 "(a)", "(b)" 等  
    """  
    slope, intercept, r_value, _, _ = stats.linregress(y_obs, y_pred)  
    r2 = r_value**2  
    mae = mean_absolute_error(y_obs, y_pred)  
    rmse = np.sqrt(mean_squared_error(y_obs, y_pred))  
  
    ....  
  
    # 刻度线加粗、向外  
    ax.tick_params(direction='out', length=6, width=2, labelsize=14)  
  
    text_style = {'fontsize': 14, 'color': 'green', 'transform': ax.transAxes}  
    ax.text(0.05, 0.92, f'$y = {slope:.2f}x + {intercept:.2f}$', **text_style)  
    ax.text(0.05, 0.83, f'$R^2 = {r2:.3f}$', **text_style)  
    ax.text(0.05, 0.74, f'$RMSE = {rmse:.2f}$ {unit}', **text_style)  
    ax.text(0.48, 0.83, f'MAE={mae:.2f} {unit}', **text_style)  
    ax.text(0.68, 0.92, model_name, fontsize=18, color='black',   
            transform=ax.transAxes, fontweight='bold')  
    ax.legend(loc='lower right', frameon=False, fontsize=13)  
    if label:  
        ax.text(-0.13, 1.05, label, fontsize=22, transform=ax.transAxes, fontweight='normal')  
    plt.tight_layout()  
    plt.savefig(save_name, format='pdf', bbox_inches='tight', dpi=1200)  
    print(f">>> 图像已保存至: {save_name}")  
    plt.show()

这里定义一个函数,用于绘制并保存包含观测值与预测值散点图、线性拟合线、1:1参考线及边际核密度曲线的回归性能可视化图表,同时显示主要评估指标(R²RMSE、MAE),完整代码公众号后台回复“1221”获取

  
y_pred = best_model.predict(X_test)  
plot_and_save_performance(y_test, y_pred,   
                          model_name="XGBoost",   
                          unit="%",   
                          label="(a)",   
                          save_name="XGBoost.pdf")

picture.image

使用调优后的XGBoost模型对测试集进行预测,并调用自定义函数绘制包含预测表现和评估指标的回归性能图,最终将图表保存为名为“XGBoost.pdf”的文件

  
from sklearn.ensemble import RandomForestRegressor  
  
# 定义随机森林回归模型  
model = RandomForestRegressor(random_state=42)  
  
# 定义超参数网格  
param_grid = {  
    'n_estimators': [50, 100, 200],  
    'max_depth': [None, 5, 7, 10],  
    'min_samples_split': [2, 5, 10],  
    'min_samples_leaf': [1, 2, 4],  
    'max_features': ['auto', 'sqrt', 'log2']  
}  
  
# 定义k折交叉验证  
kfold = KFold(n_splits=5, shuffle=True, random_state=42)  
  
# 定义网格搜索,使用负均方误差作为评分  
grid_search = GridSearchCV(  
    estimator=model,  
    param_grid=param_grid,  
    scoring='neg_mean_squared_error',  
    cv=kfold,  
    verbose=1,  
    n_jobs=-1  
)  
  
# 运行网格搜索  
grid_search.fit(X_train, y_train)  
  
# 使用最优模型预测测试集  
best_model = grid_search.best_estimator_  
  
y_pred = best_model.predict(X_test)  
plot_and_save_performance(y_test, y_pred,   
                          model_name="RF",   
                          unit="%",    
                          save_name="RF.pdf")

picture.image

这里通过网格搜索和五折交叉验证调优随机森林回归模型的超参数,训练出最优模型后对测试集进行预测,并绘制保存包含性能指标的回归性能图;不同于上面使用XGBoost模型,这里用的是随机森林,该绘图函数设计灵活,只需传入预测值和真实值即可绘制回归性能图,无论是哪种模型都适用

  
obs = np.random.gamma(shape=6, scale=7, size=800) + 10  
pred = 0.52 * obs + 18 + np.random.normal(0, 8, size=800)  
plot_and_save_performance(obs, pred,   
                          model_name="MLR",   
                          unit="mg/m$^3$",   
                          label="(a)",   
                          save_name="MLR.pdf")

picture.image

这里又生成了模拟的观测值和带噪声的预测值,来进行相应的可视化

当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息

picture.image

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。

更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 合集获取 ✨

picture.image

欢迎到公众号后台,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!

✨ 书籍推荐 ✨

无论你是零编程基础的科研新手,还是想提升机器学习技能的医学科研工作者,这本书都能带你从入门到进阶,掌握Python数据分析+医学AI应用的全流程技能

✨ AI工具推荐 ✨

picture.image

往期推荐

期刊配图:模型SHAP解释特征类别柱状图、饼图与蜂巢图的组合展示

期刊复现:基于自动机器学习的预测模型构建及其残差和部分依赖分析

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况最优模型的SHAP解释

期刊复现:单变量特征降维与共线性分析结合RFE集成排名进行特征筛选下的组合拳流程

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况优化与最优模型选择可视化

期刊复现:基于相关系数与AUC值优化特征选择剔除冗余特征精简模型(附代码)

期刊复现:如何正确使用LASSO进行二分类特征选择?避开常见误区,掌握实用技巧

期刊复现:融合聚类与多分类转二分类的亚型可解释SHAP机器学习模型构建

期刊复现:基于LightGBM、XGBoost与RF的Lasso回归堆叠模型在连续和分类特征上的模型解释

期刊复现:基于LightGBM、XGBoost与RF的堆叠模型贝叶斯优化调参与Lasso回归元模型,结合10倍交叉验证

picture.image

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

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 XR 技术的探索与实践
火山引擎开发者社区技术大讲堂第二期邀请到了火山引擎 XR 技术负责人和火山引擎创作 CV 技术负责人,为大家分享字节跳动积累的前沿视觉技术及内外部的应用实践,揭秘现代炫酷的视觉效果背后的技术实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论