1 模型
为提高天气研究和预报(Weather Research and Forecasting,WRF)数值模式风速预报的准确度,引入深度置信网络(Deep Belief Nets,DBN),构建了基于WRF数值模型的DBN风速预测模型.利用WRF数值模式进行风速预报,将预报结果与70m高的测风塔实际数据作为网络的输入对深度信念网络进行逐层训练,在Matlab平台上建立DBN风速预测模型并进行仿真.经验证:基于WRF数值模式的DBN风速预测模型的相对均方根误差为1.03%,比支持向量机(Support Vector Machine,SVM)预测模型降低了4.41%.实验结果表明:该模型能很好地预测风速并且得到了较高的预测精度.
2 部分代码
```matlab
clc;clear;format compact;close all;tic
rng('default')
%% 数据预处理
data=xlsread('215-风速数据.xls','B2706:B3449');
[x,y]=data_process(data,24);
%归一化
[xs,mappingx]=mapminmax(x',0,1);x=xs';
[ys,mappingy]=mapminmax(y',0,1);y=ys';
%划分数据
n=size(x,1);
m=n-120;%对最后5天进行预测
train_x=x(1:m,:);
test_x=x(m+1:end,:);
train_y=y(1:m,:);
test_y=y(m+1:end,:);
%%
%train dbn
dbn.sizes = [10 5];%设置两个RBM与隐含层节点
opts.numepochs = 100;%训练次数
opts.batchsize = 100;%batchsize
opts.momentum = 0;%动量
opts.alpha = 1;%学习率
opts.show =0;% 这个设置为1的话 命令行窗口要一直显示每一个迭代的误差,从而影响训练速度
dbn = dbnsetup(dbn, train_x, opts);
dbn = dbntrain(dbn, train_x, opts);
%unfold dbn to nn
nn = dbnunfoldtonn(dbn, 1);%将各训练好的RBM用于初始DBN
nn.activation_function = 'sigm';%隐含层激活函数
nn.output='linear';%回归预测的输出层用线性激活
nn.learningRate=0.1;%学习率
%train nn 微调
opts1.numepochs = 100;%训练次数
opts1.batchsize = 4;%batchsize
opts1.show =0;% 这个设置为1的话 命令行窗口要一直显示每一个迭代的误差,从而影响训练速度
nn = nntrain(nn, train_x, train_y, opts1);
figure
plot(nn.loss)
%% predict
[~,pred] = nnpredict(nn, test_x);
% 反归一化
predict_value=mapminmax('reverse',pred',mappingy);
true_value=mapminmax('reverse',test_y',mappingy);
save dbn predict_value true_value% 保存数据 以后就可以直接画图
%% 用保存下来的数据画图,并计算误差
load dbn
disp('DBN的结果分析')
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])
mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])
mape=mean(abs(true_value-predict_value)/true_value);
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])
fprintf('\n')
figure
plot(true_value,'-*','linewidth',3)
hold on
plot(predict_value,'-s','linewidth',3)
legend('实际值','预测值')
grid on
ylabel('风速')
xlabel('5月份最后5天的值')
title('DBN')
%%
toc
```
3 仿真结果
4 参考文献
[1]马婉贞, 钱育蓉, 范迎迎. 基于WRF数值模式的DBN风速预测模型研究[J]. 计算机仿真, 2018, 035(003):332-336.