基于气象数据的太阳辐射预测ML模型优化技术问询
针对太阳辐射预测的优化方案
一、数据变换与特征工程优化
- 时间特征的循环编码:hour、Month这类循环变量用OneHot会丢失连续性(比如23点和0点是相邻时段,但OneHot会将其视为独立特征),改用三角函数转换更合理:
用上述特征替换原OneHot编码的hour、Month列,保留coco的OneHot编码即可。import numpy as np df['hour_sin'] = np.sin(2 * np.pi * df['hour'] / 24) df['hour_cos'] = np.cos(2 * np.pi * df['hour'] / 24) df['month_sin'] = np.sin(2 * np.pi * df['Month'] / 12) df['month_cos'] = np.cos(2 * np.pi * df['Month'] / 12) - 数值特征标准化:MLP对特征尺度极度敏感,所有数值型气象特征(如温度、湿度、气压等)必须用
StandardScaler或MinMaxScaler做缩放,确保特征处于同一量级。 - 新增衍生特征:
- 结合日期计算日长(日出到日落的时长);
- 标记是否为白天(太阳辐射>0的时段),后续可分昼夜分别建模;
- 加入滞后特征:比如前1-3小时的温度、湿度数据,太阳辐射与近期气象条件强相关;
- 聚合特征:计算当日平均温度、过去24小时的湿度均值等。
- 缺失值与异常值处理:用
df.isnull().sum()检查缺失值,用均值/中位数填充;用箱线图或统计范围排查数值特征的异常值(如温度超出合理区间),删除或修正异常样本。
二、推荐适用模型
- 集成树模型:优先尝试
RandomForestRegressor、XGBRegressor、LGBMRegressor,这类模型对非线性特征交互的捕捉能力远强于单棵决策树,且自带特征重要性分析,调参门槛低。比如XGBoost可通过调小max_depth、降低learning_rate、增加n_estimators来控制过拟合。 - 时间序列专用模型:使用
Prophet,它专门针对带周期性的时间序列数据设计,能自动识别日、周、年周期,对小时粒度的太阳辐射预测适配性极佳,无需复杂特征工程。 - 支持向量回归(SVR):2年小时级数据约17520条,属于中小规模,SVR在非线性回归场景下表现稳定,搭配
RBF核函数,重点调参C(正则化强度)和gamma(核函数系数)即可。
三、错误排查步骤
- 确认评估指标与数据集拆分:
- 同时用RMSE、MAE、R²多个指标评估,不要依赖单一指标;
- 必须按时间顺序拆分训练/测试集(比如前1.5年数据训练,后0.5年数据测试),禁止随机拆分,避免未来数据泄露导致的虚假高准确率。
- 诊断过拟合/欠拟合:
- 若训练集效果远优于测试集,属于过拟合:决策树调小
max_depth、增大min_samples_split;MLP减少层数/神经元数,添加Dropout层或L2正则化; - 若训练集和测试集效果都差,属于欠拟合:决策树增大模型复杂度;MLP增加层数/神经元数,调高学习率。
- 若训练集效果远优于测试集,属于过拟合:决策树调小
- 特征有效性分析:用树模型的
feature_importances_或置换重要性(Permutation Importance),删除贡献极低的冗余特征,减少噪声干扰。 - 目标变量分布适配:太阳辐射在夜间为0,属于偏态分布,可尝试对目标变量做
np.log1p变换,预测后再逆变换;或者分昼夜两个子数据集建模,夜间直接输出0,仅针对白天数据训练模型。
内容的提问来源于stack exchange,提问作者Ignpl
相关产品推荐
相关产品推荐

