PyTorch基于LightGBM的海洋温盐异常垂直剖面预测

1. 总体目标

本代码利用LightGBM (LGBMRegressor)构建机器学习模型,对西北太平洋(NWP)区域海洋的温度异常(TSA)和盐度异常(SSSA)进行垂直剖面(57层) 预测。输入为14个海洋与涡旋特征变量,输出为每一层的温度与盐度异常值。

2. 数据准备

2.1 输入特征文件
  • 文件point_variables_14_Cyclonic.mat
  • 变量数量 :14个(特征名见feature_names列表)
    • 海洋变量:sla(海面高度异常)、sst(海表温度)、sss(海表盐度)、ssta(海表温度异常)、sssa(海表盐度异常)
    • 时空变量:day1、day2(时间相关)、lon、lat(经度、纬度)
    • 涡旋参数:Eddy_R(涡旋半径)、Eddy_A(涡旋振幅)、Eddy_SLA(涡旋SLA)、dlon、dlat(相对距离)
  • 样本数:200566
2.2 标签文件
  • 文件TS_anomaly_WOA23_Cyclonic.mat
  • 内容:温度异常与盐度异常垂直剖面,共114列(前57列为温度,后57列为盐度)
2.3 数据划分
  • 训练集:前62073个样本(按时间顺序)
  • 测试集:剩余样本
  • 预处理
    • 使用SimpleImputer(strategy='mean')填充缺失值
    • 对输入特征进行标准化(StandardScaler),并保存标准化器供后续使用

3. 模型结构

3.1 模型选择

仅使用LightGBM (可扩展支持其他模型,代码中预留了models_to_compare字典)。

超参数通过网格搜索(GridSearchCV)对第一层(表层)温度进行优化,得到最佳参数后用于所有层。

3.2 分层训练策略

由于输出为57个垂直层,模型对每一层独立训练一个温度模型和一个盐度模型,共114个LightGBM回归器。

  • 输入:14个标准化特征
  • 输出:该层的温度异常或盐度异常
3.3 训练细节
  • 对每一层调用.fit()训练
  • 训练完成后保存模型(joblib.dump),命名格式:{model_name}_tem_{area}_{layer}layers_best.model

4. 评估与可视化

4.1 评估指标
  • RMSE:均方根误差
  • 相关系数(Corr):预测值与真实值的Pearson相关系数
4.2 输出结果
  • 预测结果 :保存为.mat文件,包含真实值(T, S)与预测值(Tp, Sp),以及每层的RMSE和Corr
  • 特征重要性 :对支持feature_importances_的模型(LightGBM),保存每层特征重要性CSV
  • SHAP分析(尝试执行,可能因数据量或依赖问题跳过):生成SHAP摘要图
  • 相关性散点图:每5层绘制一次真实值 vs 预测值散点图,并标注相关系数与RMSE
4.3 性能汇总图
  • 绘制四个子图:温度RMSE、盐度RMSE、温度相关系数、盐度相关系数(随层数变化)
  • 保存为lgb_performance_{area}.png
  • 汇总指标(平均RMSE、最佳相关系数等)保存为CSV
4.4 论文风格双联散点图

函数plot_two_split_panels绘制训练集与测试集的散点对比图:

  • 统一坐标轴范围,强制1:1比例
  • 半透明散点 + 颜色映射误差绝对值
  • 添加R²和RMSE文本标注
  • 输出fig_lgb_temperature_train_val_test.pngfig_lgb_salinity_train_val_test.png

5. 辅助类与函数

5.1 Model

设计用于批量训练(batch_size)和增量学习(warm_start),但本代码中未使用 该类,而是直接循环调用.fit()

5.2 plot_correlation_scatter

绘制单层散点图,带对角线参考线,并返回相关系数与RMSE。

5.3 _paper_style

设置Seaborn主题、字体、DPI等,统一论文出图风格。

6. 运行流程概要

  1. 设置路径参数(pathoutputpath、区域名称area_name
  2. 读取输入特征和标签数据,划分训练/测试集,标准化特征
  3. 对LightGBM进行网格搜索(基于第一层温度)获取最佳超参数
  4. 循环57层:
    • 训练该层的温度模型和盐度模型
    • 预测训练集和测试集
    • 计算RMSE、相关系数
    • 保存特征重要性、SHAP图、散点图、模型文件
  5. 保存所有层的预测结果及性能指标
  6. 绘制整体性能图和论文风格双联散点图

7. 输出文件结构

复制代码
outputpath/
└── LGB/
    ├── standard_scaler.pkl                 # 标准化器
    ├── LGB_tem_NWP_*layers_best.model      # 各层温度模型
    ├── LGB_sal_NWP_*layers_best.model      # 各层盐度模型
    ├── LGB_NWP_val_result_01.mat           # 完整预测结果
    ├── feature_importance_layer_*_T.csv    # 各层特征重要性(温度)
    ├── feature_importance_layer_*_S.csv    # 各层特征重要性(盐度)
    ├── SHAP_LGB_temp_layer_*.png           # SHAP图(若成功)
    ├── SHAP_LGB_sal_layer_*.png
    ├── LGB_Temperature_layer_*_correlation.png  # 单层散点图
    ├── LGB_Salinity_layer_*_correlation.png
    ├── paper_style_figures/
    │   ├── fig_lgb_temperature_train_val_test.png
    │   └── fig_lgb_salinity_train_val_test.png
    └── LGB_Performance/
        ├── lgb_performance_NWP.png
        └── lgb_performance_summary_NWP_01.csv

8. 注意事项

  • 代码中训练集划分索引index_split = 62073为硬编码,应与数据实际时间顺序对应。
  • 输入文件路径使用了绝对路径D:\\2026-任务\\...,使用时需根据实际环境修改。
  • SHAP分析部分可能因计算资源或版本问题失败,代码已做异常捕获,不影响主流程。
  • 特征重要性保存了每一层的两份CSV(温度、盐度),但后续未进行综合平均或排名分析。
  • 函数plot_two_split_panels在最后调用时,第一个参数使用了trainYT[:n_train_main, :].ravel()等,其中n_train_main定义为int(n_train_total * 0.8),但实际训练集已经按前62073划分,存在不一致风险(应直接使用trainYTtestYT,而非二次划分)。建议用户根据实际数据调整。

9. 可扩展性

  • 若需对比其他模型(如SVR、XGBoost),可在models_to_compare字典中添加条目,并适当修改网格搜索参数。
  • 分层训练可替换为多输出回归(MultiOutputRegressor)以提升效率,但本代码保持了逐层独立训练的灵活性。
相关推荐
薛定猫AI4 小时前
【深度解析】终端里的免费 AI 编程助手 Freebuff:多代理架构、模型路由与安全使用实战
人工智能·安全·架构
tedcloud1237 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
曦月逸霜10 小时前
啥是RAG 它能干什么?
人工智能·python·机器学习
AI医影跨模态组学10 小时前
Lancet Digit Health(IF=24.1)广东省人民医院刘再毅&南方医科大学南方医院梁莉等团队:基于可解释深度学习模型预测胶质瘤分子改变
人工智能·深度学习·论文·医学·医学影像·影像组学
应用市场10 小时前
AI 编程助手三强争霸(2026 版):Claude、Gemini、GPT 各自擅长什么?
人工智能·gpt
2301_7693406710 小时前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发).txt
jvm·数据库·python
AC赳赳老秦10 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
脑极体10 小时前
从Token消耗到DAA增长,AI价值标尺正在重构
人工智能·重构
csdn小瓯10 小时前
LangGraph自适应工作流路由机制:从关键词匹配到智能决策的完整实现
人工智能·fastapi·langgraph
QYR-分析11 小时前
高功率飞秒激光器行业发展现状、市场机遇及未来趋势分析
大数据·人工智能