%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 读取数据
res = xlsread('数据集.xlsx');
%% 数据分析
num_size = 0.7; % 训练集占数据集比例
outdim = 1; % 最后一列为输出
num_samples = size(res, 1); % 样本个数
% res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
%% 划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);
P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input );
t_train = T_train;
t_test = T_test ;
%% 参数设置
inputnum = size(p_train, 1); % 输入层节点数
hiddennum = 50; % 隐含层节点个数
%% 优化参数设置
Particles_no = 5; % 种群数量
Max_iter = 50; % 设定最大迭代次数
dim = hiddennum * inputnum + hiddennum; % 优化参数个数
lb = -1 * ones(1, dim); % 优化参数目标下限
ub = 1 * ones(1, dim); % 优化参数目标上限
%% 优化算法
fobj = @(x)fun(x, p_train, t_train, hiddennum);
[Best_pos,Best_score, curve] = SSA(Particles_no, Max_iter, lb, ub, dim, fobj);
%% 获取最优权值
w1 = Best_pos(1 : inputnum * hiddennum);
B1 = Best_pos(inputnum * hiddennum + 1 : inputnum * hiddennum + hiddennum);
IW = reshape(w1, hiddennum, inputnum);
B = reshape(B1, hiddennum, 1);
%% 网络训练
[IW, B, LW, TF, TYPE] = elmtrain(p_train, t_train, 'sig', 0, IW, B);
%% 网络预测
T_sim1 = elmpredict(p_train, IW, B, LW, TF, TYPE);
T_sim2 = elmpredict(p_test , IW, B, LW, TF, TYPE);
%% 均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
%% 绘图
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid
figure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比';['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid
%% 相关指标计算
% R2
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;
disp(['训练集数据的R2为:', num2str(R1)])
disp(['测试集数据的R2为:', num2str(R2)])
% MAE
mae1 = sum(abs(T_sim1 - T_train)) ./ M ;
mae2 = sum(abs(T_sim2 - T_test )) ./ N ;
disp(['训练集数据的MAE为:', num2str(mae1)])
disp(['测试集数据的MAE为:', num2str(mae2)])
% MBE
mbe1 = sum(T_sim1 - T_train) ./ M ;
mbe2 = sum(T_sim2 - T_test ) ./ N ;
disp(['训练集数据的MBE为:', num2str(mbe1)])
disp(['测试集数据的MBE为:', num2str(mbe2)])
没有合适的资源?快使用搜索试试~ 我知道了~
Matlab实现SSA-ELM麻雀优化算法优化极限学习机多输入单输出回归预测(完整源码和数据)
共10个文件
m:6个
png:3个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 5 下载量 13 浏览量
2023-04-28
08:36:54
上传
评论 1
收藏 143KB ZIP 举报
温馨提示
Matlab实现SSA-ELM麻雀优化算法优化极限学习机多输入单输出回归预测(完整源码和数据) Matlab 麻雀优化算法优化极限学习机(SSA-ELM)回归预测 优化参数为权值和阈值 自带数据为excel数据,多输入,单输出,回归预测。 直接替换数据即可使用,保证程序可正常运行。 MATLAB代码
资源推荐
资源详情
资源评论
收起资源包目录
回归预测:SSA-ELM.zip (10个子文件)
SSA-ELM(R)
elmtrain.m 594B
initialization.m 487B
SSA.m 3KB
elmpredict.m 536B
main.m 3KB
数据集.xlsx 15KB
fun.m 574B
SSA-ELMR1.png 65KB
SSA-ELMR3.png 18KB
SSA-ELMR2.png 49KB
共 10 条
- 1
资源评论
- yeweiyanggis2024-03-26资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
- 蜜蜂爱吃苹果2023-12-29资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
- m0_671285242023-05-24资源质量不错,和资源描述一致,内容详细,对我很有用。
- guangchengershen2023-06-27非常有用的资源,可以直接使用,对我很有用,果断支持!
- Auroraibo2023-12-10资源内容详尽,对我有使用价值,谢谢资源主的分享。
机器学习之心
- 粉丝: 1w+
- 资源: 659
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功