鲸鱼算法改进的深度极限学习机DELM的回归预测
文章目录
- 鲸鱼算法改进的深度极限学习机DELM的回归预测
- 1.ELM原理
- 2.深度极限学习机(DELM)原理
- 3.鲸鱼算法
- 4.鲸鱼算法改进DELM
- 5.实验结果
- 6.参考文献
- 7.Matlab代码
1.ELM原理
自动编码器 AE(Auto Encoder)经过训练可以将输入复制到输出。因为不需要标记数据,训练自动编码器是不受监督的。因此,将AE的思想应用到ELM中,使ELM的输入数据同样被用于输出,即输出Y=X。作为自编码器的极限学习机ELM-AE网络结构如图1所示。
图1.ELM-AE网络结构图
若图1中m>L ,ELM-AE实现维度压缩,将高维度数据映射成低维度特征表达;若 m=L,ELM-AE实现等维度的特征表达;若 m<L ,ELM-AE实现稀疏表达,即原始数据的高维特征表达。
综上,ELM-AE是一个通用的逼近器,特点就是使网络的输出与输入相同,而且隐藏层的输入参数随机生成后正交。正交化后的优点有:
(1)根 据 J-L(Johnson-Lindensrauss) 定理,权重和偏置正交化可以将输入数据映射到不同或等维度的空间,从而实现不同功能的特征表达。
(2)权重和偏置的正交化设计可以去除特征以外的噪声,使特征之间均匀,且更加线性独立进而增强系统的泛化能力。
ELM-AE的输出可以用如下表达式表示:
其中是组成的矩阵,是组成的向量。隐藏层的输出权重为:
其中,是输入数据。
2.深度极限学习机(DELM)原理
根据ELM-AE的特征表示能力,将它作为深度极限学习机 DELM的基本单元。与传统深度学习算法相同,DELM 也是用逐层贪婪的训练方法来训练网络,DELM每个隐藏层的输入权重都使用ELM-AE初始化,执行分层无监督训练,但是与传统深度学习算法不同的是DELM不需要反向微调过程。
图2.DELM模型训练过程
DELM的思想是通过最大限度地降低重构误差使输出可以无限接近原始输入,经过每一层的训练,可以学习到原始数据的高级特征。图2描述了DELM模型的训练过程,将输入数据样本X作为第1个ELM-AE的目标输出(),进而求取输出权值 ;然后将DELM第1个隐藏层的输出矩阵当作下1个的输入与目标输出(),依次类推逐层训练,最后1层用来训练,使用式(2)来求解DELM的最后1个隐藏层的输出权重 。图2中 是最后1个隐藏层的输出矩阵,T是样本标签。 每1层隐藏层的输入权重矩阵为。
3.鲸鱼算法
鲸鱼算法的具体原理参考博客:javascript:void(0)
4.鲸鱼算法改进DELM
由上述原理可知原始DELM中的,权重采用随机初始化的方式进行初始化,而初始权重对于整个模型的预测结果影响比较大,于是采用鲸鱼算法对DELM的初始权重进行优化。适应度函数设计如下:
适应度函数为,训练集和测试集(验证集)的均方误差之和,误差越小,预测越准确。
5.实验结果
本案例中数据总量为600组,其中训练集和测试集分别划分为400组和200组。输入数据维度为3维,标签数据为1维。数据划分结果如下:
%% 导入数据
load data
%训练集——400个样本
P_train=input(:,(1:400));
T_train=output((1:400));
% 测试集——200个样本
P_test=input(:,(400:600));
T_test=output((400:600));
DELM的参数设置如下:
这里DELM采用2层结构,每层的节点数分别为2,3。采用sigmoid激活函数。
%% DELM参数设置
ELMAEhiddenLayer = [2,3];%ELM—AE的隐藏层数,[n1,n2,...,n],n1代表第1个隐藏层的节点数。
ActivF = 'sig';%ELM-AE的激活函数设置
C = 5; %正则化系数
鲸鱼算法相关参数设置:
%% 优化算法参数设置:
%计算权值的维度
dim=0;
for i = 1:length(ELMAEhiddenLayer)
dim = dim+ ELMAEhiddenLayer(i)*size(Pn_train,2);
end
popsize = 20;%种群数量
Max_iteration = 50;%最大迭代次数
lb = -1;%权值下边界
ub = 1;%权值上边界
fobj = @(X)fun(X,Pn_train,Tn_train,Pn_test,Tn_test,ELMAEhiddenLayer,ActivF,C);
最终预测结果如下:
训练集预测结果:
测试集预测结果:
从结果上来看鲸鱼-DELM的MSE明显好于原始DELM的结果。
6.参考文献
[1]颜学龙,马润平.基于深度极限学习机的模拟电路故障诊断[J].计算机工程与科学,2019,41(11):1911-1918.
7.Matlab代码