%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
% 训练集——190个样本
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')';
N = size(P_test, 2); % 测试集样本数
M = size(P_train, 2); % 训练集样本数
%% 数据归一化
[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);
%% 优化算法
pop = 20; %种群数量
Max_iter = 20; %最大迭代次数
lb = 0.001; %下边界
ub = 1; %上边界
dim = 1; %维度
fobj=@(X)fobj(X,p_train,t_train,p_test,t_test);
[ Best_score, Best_P,curve] = PSO(pop, Max_iter, lb, ub, dim, fobj);
%% 重新训练
disp(['最佳扩散值为',num2str(Best_P)])
%% 采用最佳方法建立RBFN网络
% 径向基函数的扩展速度
net = newrbe(p_train, t_train, Best_P);
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);
%% 均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
%% 适应度曲线
figure
plot(1 : length(curve), curve,'r-', 'LineWidth', 1.5);
title('PSO-RBF', 'FontSize', 13);
xlabel('迭代次数', 'FontSize', 10);
ylabel('适应度值', 'FontSize', 10);
grid off
%% 绘图
figure
plot(1: M, T_train, 'r-^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);
hold on
plot(1: M, T_sim1, 'b-o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'PSO-RBF训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid off
figure
plot(1: N, T_test, 'r-^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);
hold on
plot(1: N, T_sim2, 'b-o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'PSO-RBF测试集预测结果对比';['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid off
%% 误差图
figure
[AX,H1,H2]=plotyy(1:N,(T_sim2-T_test),1:N,(T_sim2-T_test)./T_test,'plot')%plot函数图像
set(AX(1),'XColor','k','YColor','b');%设置左边y轴
set(AX(2),'XColor','k','Ycolor','r');%设置右边y轴
xlabel('测试集样本编号'); %设置右边y轴
HH1=get(AX(1),'Ylabel');
set(HH1,'String','绝对误差');%设置左边y坐标轴标题
set(HH1,'color','b');%设置左边y坐标轴图样颜色为‘b’,蓝色
HH2=get(AX(2),'Ylabel');
set(HH2,'String','相对误差');%设置右边y坐标轴标题
set(HH2,'color','r');%设置右边y坐标轴图样颜色为‘r’红色
set(H1,'LineStyle','-','marker','o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);%设置函数y1的线形状
set(H1,'color','b');%设置函数y1的线颜色
set(H2,'LineStyle',':','marker','^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);%设置函数y2的线形状
set(H2,'color','r');%设置函数y2的线颜色
set(gca, 'FontSize', 10);
figure
[AX,H1,H2]=plotyy(1:M,(T_sim1-T_train),1:M,(T_sim1-T_train)./T_train,'plot');%plot函数图像
set(AX(1),'XColor','k','YColor','b');%设置左边y轴
set(AX(2),'XColor','k','Ycolor','r');%设置右边y轴
xlabel('训练集样本编号'); %设置右边y轴
HH1=get(AX(1),'Ylabel');
set(HH1,'String','绝对误差');%设置左边y坐标轴标题
set(HH1,'color','b');%设置左边y坐标轴图样颜色为‘b’,蓝色
HH2=get(AX(2),'Ylabel');
set(HH2,'String','相对误差');%设置右边y坐标轴标题
set(HH2,'color','r');%设置右边y坐标轴图样颜色为‘r’红色
set(H1,'LineStyle','-','marker','o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);%设置函数y1的线形状
set(H1,'color','b');%设置函数y1的线颜色
set(H2,'LineStyle',':','marker','^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);%设置函数y2的线形状
set(H2,'color','r');%设置函数y2的线颜色
set(gca, 'FontSize', 10);
%% 测试集结果
figure;
plotregression(T_test,T_sim2,['回归图']);
figure;
ploterrhist(T_test-T_sim2,['误差直方图']);
%% 相关指标计算
disp(['训练集数据误差:'])
[mae_train,mse_train,rmse_train,mape_train,error_train,errorPercent_train,R_train]=calc_error(T_train,T_sim1); %
disp(['测试集数据误差:'])
[mae_test,mse_test,rmse_test,mape_test,error_test,errorPercent_test,R_test]=calc_error(T_test,T_sim2); %
%% 训练集拟合效果图
R1 = 1 - norm(t_train - t_sim1)^2 / norm(t_train - mean(t_train))^2;
R2 = 1 - norm(t_test - t_sim2)^2 / norm(t_test - mean(t_test ))^2;
figure
plot(T_train,T_sim1,'ok');
xlabel('真实值')
ylabel('预测值')
string = {'训练集效果图';['R^2_c=' num2str(R1) ' RMSEC=' num2str(error1) ]};
title(string)
hold on ;h=lsline;
set(h,'LineWidth',1,'LineStyle','-','Color','r')
%% 预测集拟合效果图
figure
plot(T_test,T_sim2,'ob');
xlabel('真实值')
ylabel('预测值')
string1 = {'测试集效果图';['R^2_p=' num2str(R2) ' RMSEP=' num2str(error2) ]};
title(string1)
hold on ;h=lsline();
set(h,'LineWidth',1,'LineStyle','-','Color','r')
%% 全部数据集拟合效果图
figure
plot([T_train T_test],[T_sim1 T_sim2],'oc');
xlabel('真实值')
ylabel('预测值')
string1 = {'所有样本拟合预测图';['R^2_p=' num2str(mean([R2 R1])) ' RMSEP=' num2str(mean([R2 R1]))]};
title(string1)
hold on ;h=lsline();
set(h,'LineWidth',1,'LineStyle','-','Color','r')
%% 采用随机参数建立RBF网络
net1=newgrnn(p_train,t_train); %未优化RBF
t_sim1_rand=sim(net1,p_train); %训练集预测
t_sim2_rand=sim(net1,p_test); %测试集预测
%% 数据反归一化
T_sim1_rand = mapminmax('reverse', t_sim1_rand, ps_output);
T_sim2_rand = mapminmax('reverse', t_sim2_rand, ps_output);
%% 均方根误差
error1_rand = sqrt(sum((T_sim1_rand - T_train).^2) ./ M);
error2_rand = sqrt(sum((T_sim2_rand - T_test ).^2) ./ N);
%% 绘图
figure
plot(1: M, T_train, 'r-^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);
hold on
plot(1: M, T_sim1_rand, 'b-o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'原始RBF训练集预测结果对比'; ['RMSE=' num2str(error1_rand)]};
title(string)
xlim([1, M])
grid off
figure
plot(1: N, T_test, 'r-^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);
hold on
plot(1: N, T_sim2_rand, 'b-o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'原始RBF测试集预测结果对比';['RMSE=' num2str(error2_rand)]};
title(string)
xlim([1, N])
grid off
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Matlab基于粒子群算法(PSO)优化径向基神经网络(PSO-RBF)的数据回归预测(Matlab完整源码和数据),评价指标如下,代码质量极高,方便学习和替换数据。要求2018版本及以上。(含优化前后对比)优化扩散速度。 训练集数据误差: 平均绝对误差mae为: 0.010526 均方误差mse为: 0.0026316 均方误差根rmse为: 0.051299 平均绝对百分比误差mape为: 0.18416 % 拟合优度/关联系数R为: 0.9998 测试集数据误差: 平均绝对误差mae为: 0.23861 均方误差mse为: 0.53376 均方误差根rmse为: 0.73059 平均绝对百分比误差mape为: 5.4835 % 拟合优度/关联系数R为: 0.95453
资源推荐
资源详情
资源评论
收起资源包目录
PSO-RBF多输入单输出.zip (6个子文件)
calc_error.m 2KB
fobj.m 340B
initialization.m 567B
MainPSORBFR.m 7KB
PSO.m 2KB
data.xlsx 36KB
共 6 条
- 1
资源评论
- 神不在972024-03-04资源有一定的参考价值,与资源描述一致,很实用,能够借鉴的部分挺多的,值得下载。
- m0_748128552023-10-23发现一个超赞的资源,赶紧学习起来,大家一起进步,支持!
- 2301_768893672024-03-21资源内容详尽,对我有使用价值,谢谢资源主的分享。
- 2301_767251642024-01-02果断支持这个资源,资源解决了当前遇到的问题,给了新的灵感,感谢分享~
前程算法屋
- 粉丝: 4174
- 资源: 712
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功