代码原理及流程
1. 正则化极限学习机简介
2. 极限学习机的不足
参数敏感性:RELM的性能对隐藏层神经元数、激活函数和正则化系数的选择非常敏感。
权值优化复杂度:尽管引入了正则化,随机初始化权重仍可能影响模型的稳定性,需要进一步优化。
3. 多种智能优化算法
采用智能优化算法来找到最佳SVM参数,有效提升模型性能。常用的优化算法包括:
(1)灰狼优化器(Grey Wolf Optimizer ,GWO)
(2)蜜獾优化算法(Honey Badger Algorithm,HBA)
(3)改进的AO算法(IAO)
(4)基于领导者优化的哈里斯鹰优化算法(LHHO)
(5)飞蛾扑火优化算法(Moth-flame optimization algorithm,MFO)
(6)海洋掠食者算法(Marine Predators Algorithm,MPA)
(7)北苍鹰优化算法(NGO)
(8)鱼鹰优化算法(Osprey optimization algorithm,OOA)
(9)鲸鱼优化算法(The Whale Optimization Algorithm ,WOA)
(10)斑马优化算法(Zebra Optimization Algorithm,ZOA)
4. 优化ELM的过程
4.1 初始化
参数初始化:利用智能优化算法生成初始的隐藏层神经元数、激活函数类型和正则化系数。
权值初始化:初始化隐藏层到输出层的权值矩阵。
4.2 权值优化
权值寻优:在算法迭代过程中,智能算法调整权值矩阵,探索更大的权值空间,提高全局搜索能力。
目标函数:目标函数通常是预测误差和正则化项的组合,旨在最小化误差同时控制模型复杂度。
4.3 交叉验证
交叉验证:利用交叉验证评估不同权值配置的性能,选择验证误差最低的权值配置。
4.4 加速搜索与收敛
加速搜索与收敛:智能优化算法通过快速收敛特性提高权值优化速度。
5. 应用效果
提升预测精度:智能优化算法可以找到更优的权值组合,显著提升RELM的预测精度。
降低计算开销:相比于传统方法,智能优化算法可以大幅减少计算时间。
增强泛化能力:优化后的权值选择使得RELM在复杂或高噪声数据集上表现更佳。
总结
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 2.导入数据
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, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% 参数设置
inputnum = size(p_train, 1); % 输入层节点数
hiddennum = 100; % 隐藏层节点数
C = 0.001; % 正则化系数
%% 参数设置
fun = @getObjValue; % 目标函数
dim = inputnum * hiddennum + hiddennum; % 优化参数个数
lb = -1 * ones(1, dim); % 优化参数目标下限
ub = 1 * ones(1, dim); % 优化参数目标上限
pop =10; % 麻雀数量
Max_iteration = 100; % 最大迭代次数
addpath(genpath(pwd));%将算法文件夹添加到路径中
index = 1; % 结果保存到 Optimal resultsa
N_index=10;