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%.实验结果表明:该模型能很好地预测风速并且得到了较高的预测精度.

【预测模型】基于DBN实现风速预测matlab源码_DBN

【预测模型】基于DBN实现风速预测matlab源码_DBN_02

【预测模型】基于DBN实现风速预测matlab源码_DBN_03

【预测模型】基于DBN实现风速预测matlab源码_DBN_04

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 仿真结果

【预测模型】基于DBN实现风速预测matlab源码_DBN_05

【预测模型】基于DBN实现风速预测matlab源码_DBN_06

4 参考文献

[1]马婉贞, 钱育蓉, 范迎迎. 基于WRF数值模式的DBN风速预测模型研究[J]. 计算机仿真, 2018, 035(003):332-336.

【预测模型】基于DBN实现风速预测matlab源码_DBN_07