%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
f = xlsread('windspeed.xls','Sheet1','B2:B1001');
[x,y]=data_process(f,12); %步长为12
n=size(x,1);
m=round(n*0.7); %前70%训练,对最后30%进行预测
P_train=x(1:m,:)';
T_train=y(1:m,:)';
P_test=x(m+1:end,:)';
T_test=y(m+1:end,:)';
M = size(P_train,2);
% 测试集—200个
N = size(T_test,2);
outdim=1; %输出的维度
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% 获取输入层节点、输出层节点个数
inputnum=size(p_test,1);
outputnum=size(t_test,1);
hiddennum=10;
%% 算法寻最优权值阈值
net=newelm(p_train,t_train,hiddennum,{'tansig','purelin'},'trainlm');% 建立模型
fobj = @(x) fun(x,inputnum,hiddennum,outputnum,net,p_train,t_train,p_test,t_test);
%初始化SSA参数
popsize=10; %初始种群规模
maxgen=20; %最大进化代数
dim=inputnum*hiddennum+hiddennum*hiddennum+hiddennum+hiddennum*outputnum+outputnum; %自变量个数
lb=repmat(-1,1,dim); %自变量下限
ub=repmat(-1,1,dim); %自变量上限
[Leader_score,Leader_pos,Convergence_curve]=PSO(popsize,maxgen,lb,ub,dim,fobj); %开始优化
figure
plot(Convergence_curve,'linewidth',1.5);
grid on
xlabel('迭代次数')
ylabel('适应度函数')
title('PSO-Elman收敛曲线')
%网络参数配置
net.trainParam.epochs=1000; % 训练次数,这里设置为1000次
net.trainParam.lr=0.01; % 学习速率,这里设置为0.01
net.trainParam.goal=0.00001; % 训练目标最小误差,这里设置为0.0001
net.trainParam.show=25; % 显示频率,这里设置为每训练25次显示一次
net.trainParam.mc=0.01; % 动量因子
net.trainParam.min_grad=1e-6; % 最小性能梯度
net.trainParam.max_fail=6; % 最高失败次数
w1=Leader_pos(1:inputnum*hiddennum); %输入层到隐含层的权值元素
w2=Leader_pos(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum*hiddennum); %承接层到隐含层的权值
B1=Leader_pos(inputnum*hiddennum+hiddennum*hiddennum+1:inputnum*hiddennum+hiddennum*hiddennum+hiddennum); %隐含层到输出层的权值元素
w3=Leader_pos(inputnum*hiddennum+hiddennum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum*hiddennum+hiddennum+hiddennum*outputnum); %隐含层的各神经元阈值元素
B2=Leader_pos(inputnum*hiddennum+hiddennum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum*hiddennum+hiddennum+hiddennum*outputnum+outputnum); %输出层的各神经元阈值元素
%矩阵重构
net.iw{1,1}=reshape(w1,hiddennum,inputnum); %输入层到隐含层的权值
net.lw{1,1}=reshape(w2,hiddennum,hiddennum); %承接层到隐含层的权值
net.lw{2,1}=reshape(w3,outputnum,hiddennum); %隐含层到输出层的权值矩阵
net.b{1}=reshape(B1,hiddennum,1); %隐含层的各神经元阈值
net.b{2}=B2; %输出层的各神经元阈值
[net,tr]=train(net,p_train,t_train);
%% 仿真测试
t_sim1 = sim(net, p_train);
t_sim2 = sim(net, p_test);
%% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
%% 均方根误差 RMSE
error1 = sqrt(sum((T_sim1 - T_train).^2)./M);
error2 = sqrt(sum((T_test - T_sim2).^2)./N);
%%
%决定系数
R1=eva1(T_train,T_sim1);
R2=eva2(T_test,T_sim2);
%%
%均方误差 MSE
mse1 = sum((T_sim1 - T_train).^2)./M;
mse2 = sum((T_sim2 - T_test).^2)./N;
%%
%RPD 剩余预测残差
SE1=std(T_sim1-T_train);
RPD1=std(T_train)/SE1;
SE=std(T_sim2-T_test);
RPD2=std(T_test)/SE;
%% 平均绝对误差MAE
MAE1 = mean(abs(T_train - T_sim1));
MAE2 = mean(abs(T_test - T_sim2));
%% 平均绝对百分比误差MAPE
MAPE1 = mean(abs((T_train - T_sim1)./T_train));
MAPE2 = mean(abs((T_test - T_sim2)./T_test));
%% 训练集绘图
figure
%plot(1:M,T_train,'r-*',1:M,T_sim1,'b-o','LineWidth',1)
plot(1:M,T_train,'r-',1:M,T_sim1,'b-','LineWidth',1.5)
legend('真实值','PSO-Elman预测值')
xlabel('预测样本')
ylabel('预测结果')
string={'训练集预测结果对比';['(R^2 =' num2str(R1) ' RMSE= ' num2str(error1) ' MSE= ' num2str(mse1) ' RPD= ' num2str(RPD1) ')' ]};
title(string)
%% 预测集绘图
figure
plot(1:N,T_test,'r-',1:N,T_sim2,'b-','LineWidth',1.5)
legend('真实值','PSO-Elman预测值')
xlabel('预测样本')
ylabel('预测结果')
string={'测试集预测结果对比';['(R^2 =' num2str(R2) ' RMSE= ' num2str(error2) ' MSE= ' num2str(mse2) ' RPD= ' num2str(RPD2) ')']};
title(string)
%% 测试集误差图
figure
ERROR3=T_test-T_sim2;
plot(T_test-T_sim2,'b-*','LineWidth',1.5)
xlabel('测试集样本编号')
ylabel('预测误差')
title('测试集预测误差')
grid on;
legend('预测输出误差')
%% 绘制线性拟合图
%% 打印出评价指标
disp(['-----------------------误差计算--------------------------'])
disp(['PSO-Elman的预测集的评价结果如下所示:'])
disp(['平均绝对误差MAE为:',num2str(MAE2)])
disp(['均方误差MSE为: ',num2str(mse2)])
disp(['均方根误差RMSEP为: ',num2str(error2)])
disp(['决定系数R^2为: ',num2str(R2)])
disp(['剩余预测残差RPD为: ',num2str(RPD2)])
disp(['平均绝对百分比误差MAPE为: ',num2str(MAPE2)])
grid
没有合适的资源?快使用搜索试试~ 我知道了~
基于粒子群算法(PSO)优化递归神经网络(PSO-Elman)时间序列预测 评价指标包括:R2、MAE、MSE、RMSE和M
共8个文件
m:7个
xls:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 104 浏览量
2023-12-25
10:54:40
上传
评论
收藏 28KB ZIP 举报
温馨提示
基于粒子群算法(PSO)优化递归神经网络(PSO-Elman)时间序列预测。 评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。 基于粒子群算法(PSO)优化递归神经网络(PSO-Elman)时间序列预测。 评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。
资源推荐
资源详情
资源评论
收起资源包目录
12 PSO-Elman -时间序列.zip (8个子文件)
initialization.m 567B
windspeed.xls 76KB
main.m 5KB
PSO.m 2KB
eva2.m 186B
eva1.m 203B
fun.m 2KB
data_process.m 174B
共 8 条
- 1
资源评论
智能算法及其模型预测
- 粉丝: 2525
- 资源: 871
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功