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

张开发
2026/4/16 8:29:18 15 分钟阅读

分享文章

PyTorch基于LightGBM的海洋温盐异常垂直剖面预测
1. 总体目标本代码利用LightGBMLGBMRegressor构建机器学习模型对西北太平洋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相对距离样本数2005662.2 标签文件文件TS_anomaly_WOA23_Cyclonic.mat内容温度异常与盐度异常垂直剖面共114列前57列为温度后57列为盐度2.3 数据划分训练集前62073个样本按时间顺序测试集剩余样本预处理使用SimpleImputer(strategymean)填充缺失值对输入特征进行标准化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.model4. 评估与可视化4.1 评估指标RMSE均方根误差相关系数Corr预测值与真实值的Pearson相关系数4.2 输出结果预测结果保存为.mat文件包含真实值T, S与预测值Tp, Sp以及每层的RMSE和Corr特征重要性对支持feature_importances_的模型LightGBM保存每层特征重要性CSVSHAP分析尝试执行可能因数据量或依赖问题跳过生成SHAP摘要图相关性散点图每5层绘制一次真实值 vs 预测值散点图并标注相关系数与RMSE4.3 性能汇总图绘制四个子图温度RMSE、盐度RMSE、温度相关系数、盐度相关系数随层数变化保存为lgb_performance_{area}.png汇总指标平均RMSE、最佳相关系数等保存为CSV4.4 论文风格双联散点图函数plot_two_split_panels绘制训练集与测试集的散点对比图统一坐标轴范围强制1:1比例半透明散点 颜色映射误差绝对值添加R²和RMSE文本标注输出fig_lgb_temperature_train_val_test.png和fig_lgb_salinity_train_val_test.png5. 辅助类与函数5.1Model类设计用于批量训练batch_size和增量学习warm_start但本代码中未使用该类而是直接循环调用.fit()。5.2plot_correlation_scatter绘制单层散点图带对角线参考线并返回相关系数与RMSE。5.3_paper_style设置Seaborn主题、字体、DPI等统一论文出图风格。6. 运行流程概要设置路径参数path、outputpath、区域名称area_name读取输入特征和标签数据划分训练/测试集标准化特征对LightGBM进行网格搜索基于第一层温度获取最佳超参数循环57层训练该层的温度模型和盐度模型预测训练集和测试集计算RMSE、相关系数保存特征重要性、SHAP图、散点图、模型文件保存所有层的预测结果及性能指标绘制整体性能图和论文风格双联散点图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.csv8. 注意事项代码中训练集划分索引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划分存在不一致风险应直接使用trainYT和testYT而非二次划分。建议用户根据实际数据调整。9. 可扩展性若需对比其他模型如SVR、XGBoost可在models_to_compare字典中添加条目并适当修改网格搜索参数。分层训练可替换为多输出回归MultiOutputRegressor以提升效率但本代码保持了逐层独立训练的灵活性。

更多文章