代码功能
该代码实现了一个光伏发电量预测系统,采用三种深度学习模型(LSTM、CNN-LSTM、贝叶斯优化的CNN-LSTM)对北半球光伏数据进行时间序列预测,并通过多维度评估指标和可视化对比模型性能。
算法步骤
1. 数据预处理
- 数据导入:从Excel读取北半球光伏数据
- 序列重构
构建时间窗口:用前4步预测下一步 - 数据集划分:70%训练集,30%测试集
- 归一化:采用
mapminmax
归一化到[0,1]区间 - 数据平铺:转换为LSTM需要的序列格式
2. 模型构建
① LSTM模型
layers = [
sequenceInputLayer(f_)
lstmLayer(20) % 20个LSTM单元
reluLayer
fullyConnectedLayer(1)
regressionLayer];
② CNN-LSTM模型
lgraph = layerGraph();
tempLayers = [
sequenceInputLayer([f_,1,1])
sequenceFoldingLayer];
lgraph = addLayers(lgraph,tempLayers);
tempLayers = [
convolution2dLayer([3,1],16) % 卷积核3x1, 16通道
reluLayer
convolution2dLayer([3,1],32) % 卷积核3x1, 32通道
reluLayer];
lgraph = addLayers(lgraph,tempLayers);
tempLayers = [
sequenceUnfoldingLayer
flattenLayer
lstmLayer(5) % 5个LSTM单元
fullyConnectedLayer(1)
regressionLayer];
③ BO-CNN-LSTM模型
- 贝叶斯优化超参数:
- LSTM单元数
- 初始学习率
- L2正则化系数
3. 模型训练
- 通用设置:
- 优化器:Adam
- 最大迭代次数:500
- 学习率策略:每400次衰减为0.1倍
- 正则化:L2权重衰减
- 训练过程监控:记录训练损失和RMSE
4. 预测与反归一化
t_sim = predict(net, Lp_test);
T_sim = mapminmax('reverse', t_sim, ps_output); % 反归一化
5. 评估与可视化
- 评估指标:RMSE、MAE、MAPE、R²、MSE
- 可视化对比:
- 预测值 vs 真实值曲线
- 误差分布柱状图
- 雷达图/罗盘图多指标对比
- 二维散点图(R² vs MAPE)
- 柱状图指标对比
关键参数设定
参数 | 值 | 说明 |
---|---|---|
num_size |
0.7 | 训练集比例 |
MaxEpochs |
500 | 最大训练轮次 |
LSTM Units |
20 | 基础LSTM单元数 |
CNN Filters |
[16,32] | 卷积层通道数 |
Drop Factor |
0.1 | 学习率衰减因子 |
Drop Period |
400 | 衰减周期 |
运行环境要求
MATLAB版本:R2021a或更高
应用场景
- 光伏发电预测:
- 电网调度与能源管理
- 电站运维决策支持
- 时间序列预测:
- 电力负荷预测
- 气象数据预测
- 金融时间序列分析
- 模型对比研究:
- LSTM vs CNN-LSTM架构性能对比
- 贝叶斯优化效果验证
创新点总结
- 三级模型架构:
LSTM → CNN-LSTM → BO-CNN-LSTM渐进式优化 - 多维度评估体系:
- 5种量化指标(RMSE/R²/MAE/MAPE/MSE)
- 6种可视化对比(曲线/雷达/罗盘/柱状/散点/误差图)
- 贝叶斯自动调参:
优化神经网络超参数组合
注:实际运行时需确保:
北半球光伏数据.xlsx
文件在路径中- 自定义函数(
fical.m
,radarChart.m
)已实现