%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
% 训练集—
P_train = xlsread('data','training set','B2:G191')';
T_train= xlsread('data','training set','H2:H191')';
% 测试集——44个样本
P_test=xlsread('data','test set','B2:G45')';
T_test=xlsread('data','test set','H2:H45')';
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]=SCSO(popsize,maxgen,lb,ub,dim,fobj); %开始优化
figure
plot(Convergence_curve,'linewidth',1.5);
grid on
xlabel('迭代次数')
ylabel('适应度函数')
title('SCSO-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-o','LineWidth',1.5)
legend('真实值','SCSO-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-o','LineWidth',1.5)
legend('真实值','SCSO-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(['SCSO-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
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
卷尾猴算法(SCSO)优化递归神经网络Elman回归预测,SCSO-Elman回归预测模型,多变量输入模型。 评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。 卷尾猴算法(SCSO)优化递归神经网络Elman回归预测,SCSO-Elman回归预测模型,多变量输入模型。 评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。
资源推荐
资源详情
资源评论
收起资源包目录
1 SCSO-Elman -2.zip (8个子文件)
RouletteWheelSelection.m 133B
initialization.m 567B
main.m 5KB
eva2.m 186B
eva1.m 203B
SCSO.m 1KB
fun.m 2KB
data.xlsx 36KB
共 8 条
- 1
资源评论
智能算法及其模型预测
- 粉丝: 1823
- 资源: 788
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Springboot儿童玩具售卖网站的设计与实现(部署视频).zip
- STM32F103C单片机+TJA1050+CP2102 CANBUS总线转USB串口ALTIUM设计硬件(原理图+PCB)工程
- TM1620芯片的仿真,用单片机替代
- 一些简单聚类算法的java实现.zip
- 学生画像可视化系统+课程聚类推荐.zip
- 系统聚类法与k均值聚类法.课程作业的代码,完全是调包且借助了GPT工具,错误欢迎指正 .zip
- 数据挖掘K-Means聚类算法Java实现.zip
- PKYJ6WKP(3).mobileconfig
- 软件架构恢复工具,使用聚类.zip
- 光伏电池异常检测数据集VOC+YOLO格式219张2类别.7z
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功