基于布谷鸟算法改进的DELM预测-附代码
布谷鸟算法改进的深度极限学习机DELM的回归预测
1.ELM原理
ELM基础原理请参考:https://blog.csdn.net/u011835903/article/details/111073635。
自动编码器 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是一个通用的逼近器,特点就是使网络的输出与输入相同,而且隐藏层的输入参数 ( a i , b i ) (a_i,b_i) (ai,bi)随机生成后正交。正交化后的优点有:
(1)根 据 J-L(Johnson-Lindensrauss) 定理,权重和偏置正交化可以将输入数据映射到不同或等维度的空间,从而实现不同功能的特征表达。
(2)权重和偏置的正交化设计可以去除特征以外的噪声,使特征之间均匀,且更加线性独立进而增强系统的泛化能力。
ELM-AE的输出可以用如下表达式表示:
x
j
=
∑
i
=
1
L
β
i
G
(
a
i
,
b
i
,
x
j
)
,
a
i
∈
R
m
,
β
i
∈
R
m
,
j
=
1
,
2
,
.
.
.
,
N
,
a
T
a
=
I
,
b
T
b
=
1
(1)
x_j=\sum_{i=1}^L \beta_iG(a_i,b_i,x_j),a_i\in R^m,\beta_i\in R^m,j=1,2,...,N,a^Ta=I,b^Tb=1 \tag{1}
xj=i=1∑LβiG(ai,bi,xj),ai∈Rm,βi∈Rm,j=1,2,...,N,aTa=I,bTb=1(1)
其中
a
a
a是
a
i
a_i
ai组成的矩阵,
b
b
b是
b
i
b_i
bi组成的向量。隐藏层的输出权重为:
β
=
(
I
C
+
H
T
H
)
−
1
H
T
X
(2)
\beta = (\frac{I}{C}+H^TH)^{-1}HTX \tag{2}
β=(CI+HTH)−1HTX(2)
其中,
X
=
[
x
1
,
.
.
.
,
x
N
]
X=[x_1,...,x_N]
X=[x1,...,xN]是输入数据。
2.深度极限学习机(DELM)原理
根据ELM-AE的特征表示能力,将它作为深度极限学习机 DELM的基本单元。与传统深度学习算法相同,DELM 也是用逐层贪婪的训练方法来训练网络,DELM每个隐藏层的输入权重都使用ELM-AE初始化,执行分层无监督训练,但是与传统深度学习算法不同的是DELM不需要反向微调过程。
DELM的思想是通过最大限度地降低重构误差使输出可以无限接近原始输入,经过每一层的训练,可以学习到原始数据的高级特征。图2描述了DELM模型的训练过程,将输入数据样本X作为第1个ELM-AE的目标输出( X 1 = X X_1 =X X1=X),进而求取输出权值 β 1 β_1 β1 ;然后将DELM第1个隐藏层的输出矩阵 H 1 H_1 H1当作下1个 E L M − A E ELM-AE ELM−AE的输入与目标输出( X 2 = X X_2=X X2=X),依次类推逐层训练,最后1层用 E L M ELM ELM来训练,使用式(2)来求解DELM的最后1个隐藏层的输出权重 β i + 1 \beta_{i+1} βi+1 。图2中 H i + 1 H_{i+1} Hi+1 是最后1个隐藏层的输出矩阵,T是样本标签。 H i + 1 H_{i+1} Hi+1每1层隐藏层的输入权重矩阵为 W i + 1 = β i + 1 T W_{i+1}=\beta_{i+1}^T Wi+1=βi+1T。
3.布谷鸟算法
布谷鸟算法的具体原理参考博客:https://blog.csdn.net/u011835903/article/details/108404684
4.布谷鸟算法改进DELM
由上述原理可知原始DELM中的,权重采用随机初始化的方式进行初始化,而初始权重对于整个模型的预测结果影响比较大,于是采用布谷鸟算法对DELM的初始权重进行优化。适应度函数设计如下:
f
i
t
n
e
s
s
=
M
S
E
(
t
r
a
i
n
)
+
M
S
E
(
t
e
s
t
)
fitness=MSE(train)+MSE(test)
fitness=MSE(train)+MSE(test)
适应度函数为,训练集和测试集(验证集)的均方误差之和,误差越小,预测越准确。
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代码
相关文章
- 激光slam综述_SLAM算法
- 算法步步为营(02)-两数之和
- Canny边缘检测算法的原理与实现[通俗易懂]
- 最简单的分类算法之一:KNN(原理解析+代码实现)[通俗易懂]
- NSGA2算法代码理解
- BM3D 算法原理详细解析 按过程步骤讲解(附C++实现代码)[通俗易懂]
- 大数运算的算法设计和C++实现[通俗易懂]
- OpenSSL密码库算法笔记——第5.2章 椭圆曲线算法的函数架构图
- 从矩阵链式求导的角度来深入理解BP算法(原理+代码)
- 【动态规划1】钢条切割算法Java代码
- SMART S7-200PLC流量累计算法实现(梯形图算法详解+优化)
- 【Redis08】删除策略与逐出算法
- 联邦学习基本算法FedAvg的代码实现
- murmurhash算法_MurmurHash与随机数
- 回溯法解决01背包问题算法_01背包问题伪代码
- 指派问题匈牙利算法例题_匈牙利算法matlab代码
- 回溯算法 js_回溯算法代码
- 进程调度算法设计_三种调度算法
- 网络社群发现算法挖掘bilibili视频流量数据可视化|附代码数据
- 交互式调整视觉算法参数(一)-图像阈值参数
- 听说你还不会滑动窗口?来一篇文章带你学会滑动窗口算法
- java数据结构和算法(二)
- Python进阶之递归算法详解
- A-LOAM代码算法
- 前端leetcde算法面试套路之二叉树4
- 【计算机网络】数据链路层 : CSMA/CD 协议 ( 载波监听多点接入 / 碰撞检测 协议 | 单程端到端传播时延 | 截断二进制指数规避算法 | 计算示例 | 最小帧长问题 )★
- JVM垃圾回收的 “三色标记算法” 实现,内容太干!
- python实现的堆排序算法代码详解编程语言
- Java HmacSHA1算法详解编程语言
- 全排列 51 n皇后问题算法详解编程语言
- LVS集群之十种调度算法及负载均衡——理论
- Oracle中大数据按小到大排序算法(oracle从大到小排序)
- Python连连看连接算法
- PHP各种排序算法实现代码
- C#页码导航显示及算法实现代码
- C#实现协同过滤算法的实例代码
- JavaScript生成GUID的多种算法小结
- C#计算两个文件的相对目录算法的实例代码
- k均值算法c++语言实现代码