基于遗传算法优化极限学习机预测及其MATLAB实现-附代码

基于遗传算法优化极限学习机预测及其MATLAB实现-附代码

1 极限学习机ELM原理

ELM预测相关理论可查看上一篇博客: 极限学习机ELM回归预测

简单的ELM预测代码如下:

%初始化
clear
close all
clc
warning off
rng('default')

P=randi([1 10],3,100);        %构建训练数据的输入样本
T=sum(P,1);           %构建训练数据的输出样本
P1= randi([1 10],3,10);     %构建测试数据的输入样本
T1=sum(P1,1);           %构建测试数据的输出样本

% 归一化...使用mapminmax函数即可,由于生成的数据无量纲和数量级差异,跳过

%% ELM训练过程
N=3;       %输入层的神经元节点个数
L=30;     %隐含层的神经元节点个数
M=1;     %输出层的神经元节点个数

IW=2*rand(L,N)-1;           %初始化输入层与隐含层的连接权值,范围(-1,1)
B=rand(L,1);             %初始化隐含层的偏置,范围(0,1)
tempH = IW * P + B;  %计算隐含层的输出值
h= 1./ (1 + exp(tempH ));          %使用映射函数G(x)=1/(1+exp(x)),h为隐含层对第样本特征的映射值
LW=pinv(h')*T';          %求逆,得到输出层的权值,结束训练(转置是为了让维度对应)

%% ELM预测过程
tempH1=IW*P1+B;         %计算隐含层输出值
h1= 1./ (1 + exp(tempH1 ));        %对特征作映射
ELM_OUT= (h1' * LW)';

%% 分析预测的误差
error=T1-ELM_OUT;   %误差=实际值-预测值
disp('          序号     期望值      预测值       误差')
disp([1:10
    T1
    ELM_OUT
    error]')
disp('误差平方和...')
sse=sum(error.^2)    
disp('均方误差...')
mse=mean(error.^2) 
disp('平均相对误差...')
mape=mean(abs(error)./T1)   

%作图分析预测的效果
figure
hold on
plot(1:10,T1,'bo:','linewidth',1.0)
plot(1:10,ELM_OUT,'r*-.','linewidth',1.0)
legend('期望值','预测值')
xlabel('测试样本序号')
ylabel('指标的值')


2 基于GA-ELM预测模型的建立

在理论与代码的实现过程中,注意到存在两个随机变量: 输入层与隐含层的连接权值IW,以及隐含层的阈值B.

IW=2*rand(L,N)-1;           %随机初始化权值,服从(-1,1)均匀分布
B=rand(L,1);             %随机初始化阈值,服从(0,1)均匀分布

针对ELM 随机产生的输入层权值和隐含层阈值导致网络不稳定的问题,采用遗传算法对极限学习机的权值和阈值进行优化,从而降低预测误差值,改善网络性能,得以提升ELM预测精度。

2.1 优化变量的处理

设极限学习机的输入层神经元节点数目为 n n n, 隐含层节点数目为 l l l,

输入层与隐含层的连接权值为 ω \omega ω:

ω = [ ω 11 ω 12 ⋯ β 1 n ω 21 ω 22 ⋯ β 2 n ⋮ ⋮ ⋮ ⋮ ω l 1 ω l 2 ⋯ β l n ] l × n \omega=\left[\begin{array}{cccc} \omega_{11} & \omega_{12} & \cdots & \beta_{1 n} \\ \omega_{21} & \omega_{22} & \cdots & \beta_{2 n} \\ \vdots & \vdots & \vdots & \vdots \\ \omega_{l 1} & \omega_{l 2} & \cdots & \beta_{l n} \end{array}\right]_{l \times n} ω= ω11ω21ωl1ω12ω22ωl2β1nβ2nβln l×n

隐含层的阈值为 b b b:

b = [ b 1 b 2 ⋮ b l ] l × 1 b=\left[\begin{array}{c} b_{1} \\ b_{2} \\ \vdots \\ b_{l} \end{array}\right]_{l \times 1} b= b1b2bl l×1

式中, ω 、 b \omega、b ωb分别为矩阵和列向量。使用遗传算法等智能算法求解时,对于优化变量,采用向量型编码个体位置的方法操作较为简单。此外,还有矩阵编码,二进制编码等编码方式。此处采用向量型的浮点编码。

做法是: 先确定 ω \omega ω b b b中元素变量的总数: n × l + l n\times l + l n×l+l,再生成等长度的初始种群位置向量。由 n n n 个个体组成的父代可表示如下:

X = [ x 1 1 x 1 2 … x 1 d x 2 1 x 2 2 … x 2 d … … … ⋯ x n 1 x n 2 … x n d ] X=\left[\begin{array}{cccc} x_{1}^{1} & x_{1}^{2} & \ldots & x_{1}^{d} \\ x_{2}^{1} & x_{2}^{2} & \ldots & x_{2}^{d} \\ \ldots & \ldots & \ldots & \cdots \\ x_{n}^{1} & x_{n}^{2} & \ldots & x_{n}^{d} \end{array}\right] X= x11x21xn1x12x22xn2x1dx2dxnd

式中, d是变量维度, 且 d = n × l + l d = n\times l + l d=n×l+l.

2.2 目标函数的处理

根据ELM的训练公式:

∥ H β − T ∥ 2 = 0 \|\boldsymbol{H} \boldsymbol{\beta}-\boldsymbol{T}\|^{2}=0 HβT2=0

对上式求逆,解出输出层的权值 β \beta β,可得到一个训练好的极限学习机模型。因而当该方程可解 ( H H H的逆矩阵存在) 时,得到的模型对训练样本是无误差的。GA优化目的是针对随机初始化权值阈值带来的网络预测不稳定,通过优化权值和阈值,提升预测精度。因此,将训练集与测试集整体的均方误差作为适应度函数。适应度函数值越小,表明训练越准确,且兼顾模型的预测精度更好。

F = min ⁡ ( M S E Trainingset  ,  Testingset  ) F=\min \left(M S E_{\text {Trainingset }, \text { Testingset }}\right) F=min(MSETrainingset , Testingset )

式中,TraingingSet,TestingSet,分别为训练集和测试集的样本。

2.3 流程图设计

在这里插入图片描述

3 基于GA-ELM模型的身体脂肪预测应用

3.1 数据介绍

身体脂肪数据集 bodyfatDataset 是深度学习中常用的预测数据集,对该数据集的描述如下:

bodyfatInputs - a 13x252 matrix defining thirteen attributes for 252
people.
  1. Age (years)
  2. Weight (lbs)
  3. Height (inches)
  4. Neck circumference (cm)
  5. Chest circumference (cm)
  6. Abdomen 2 circumference (cm)
  7. Hip circumference (cm)
  8. Thigh circumference (cm)
  9. Knee circumference (cm)
 10. Ankle circumference (cm)
 11. Biceps (extended) circumference (cm)
 12. Forearm circumference (cm)
 13. Wrist circumference (cm)

bodyfatTargets - a 1x252 matrix of associated body fat percentages,
to be estimated from the inputs.

整理到EXCEL中, 数据形式如下:

样本序号输入指标1输入指标2输出指标
1-
2-
-
n-

3.2 数据处理

由于不同变量的单位和取值范围差异较大,为了消除变量之间数量级的差别避免造成预测误差,以及方便求解,将数据进行归一化处理是实现预测前对数据常做的处理。采用MATLAB 自带归一化函数mapmin max 将所有数据都转化为[- 1,1]之间的数据。函数调用方式如下:

[pn,ps] = mapminmax( p) 

式中, p是输入原始数据, pn 是归一化的数据, ps是记录数据归一化操作的结构体。输出数据的归一化同理,预测完成后同样利用此函数进行反归一化,获得真实数据。

3.3 GA-ELM预测算法的步骤

  1. 初始化染色体种群编码。将极限学习机的输入层权值与隐含层阈值元素取出,并计算染色体长度。随机初始化染色体。
  2. 设置适应度函数。利用ELM对样本的预测输出误差作为适应度函数,计算初始种群中个体的适应度值。
  3. 进行选择、交叉、变异操作。采用轮盘赌选择时,对于适应度函数,由于取的是均方误差,在进化过程中,均方误差减小,因此轮盘赌设计时适应度函数需取倒数,从而选择"适应度大"的个体。
  4. 计算子代个体的适应度,并与父代个体合并,留下适应度值较好的个体构成新的子代种群。
  5. 反复迭代执行3和4步,直到迭代次数达到设定的最大值。
  6. 输出最好的染色体信息。对适应度值最好的染色体进行解码,并将解码后得到的权值和阈值赋给预测使用的ELM。
  7. 以最优的权值和阈值初始化ELM 的参数,获得最优的网络结构。最后测试网络的预测精度。

3.4 组合模型的参数设置

确定ELM的结构参数:

% 1. 输入层神经元节点数,
inputnum=size(input,2);  % input的行向对应输入指标个数

% 2. 输出层的神经元节点数,
outputnum=size(output,2);  % output的行向对应输出指标个数

disp('/')
disp('极限学习机ELM结构...')
disp(['输入层的节点数为:',num2str(inputnum)])
disp(['输出层的节点数为:',num2str(outputnum)])
disp(' ')
disp('隐含层节点的确定过程...')

% 3. 确定隐含层的神经元节点个数
%注意:BP神经网络确定隐含层节点的方法是:采用经验公式hiddennum=sqrt(m+n)+a,m为输入层节点个数,n为输出层节点个数,a一般取为1-10之间的整数
%在极限学习机中,该经验公式往往会失效,设置较大的范围进行隐含层节点数目的确定即可。

MSE=1e+5; %初始化最小误差
for hiddennum=20:30                      
...
%更新最佳的隐含层节点
    if minMse<MSE
        MSE=minMse;
        hiddennum_best=hiddennum;
    end

初始化遗传算法的参数:

nvars=inputnum*hiddennum_best+hiddennum_best;    %自变量个数
PopulationSize_Data=30;   %种群规模
MaxGenerations_Data=50;   %最大进化代数
CrossoverFraction_Data=0.8;  %交叉概率
MigrationFraction_Data=0.2;   %变异概率

4 运行结果

4.1 GA的进化曲线,含最优的适应度值与平均适应度

在这里插入图片描述
4.2 GA优化ELM预测的结果与误差分析

在这里插入图片描述
4.3 优化前后的预测曲线对比 (绿色为实测值, 红色为GA-ELM预测值, 蓝色为ELM预测值)

在这里插入图片描述

5 MATLAB代码

CSDN下载代码

https://download.csdn.net/download/qq_57971471/87730024

  • 5
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
### 回答1: Ga-elm是基于改进的极限学习机(ELM)算法和遗传算法(GA)的一种混合算法。ELM是一种高效的单层前馈神经网络算法,其特点是随机初始化输入层和隐藏层之间的连接权重,然后通过解析解的方式快速计算输出层权重。而GA是一种优化算法,通过搜索空间中的解来找到最优解。 Ga-elm matlab代码中,首先会将训练数据输入到ELM网络中,通过随机初始化权重来计算输出结果。然后采用遗传算法优化输出层权重,以提高网络的性能。GA会对权重进行交叉、变异等操作,在每一代中选择适应度高的个体进行进一步优化,直到达到最优解。 代码中会设置一些参数,如种群大小、遗传代数、交叉概率和变异概率等。在每一代的迭代过程中,会根据适应度函数对个体进行评估和选择操作,然后进行交叉和变异操作来生成新的个体。交叉和变异会改变个体的权重,通过不断迭代,逐渐找到最优的权重解。 最后,通过测试数据来评估网络的性能,比较预测值和真实值之间的误差,并计算准确率等指标来判断网络的优劣。 总的来说,Ga-elm matlab代码实现了一种将遗传算法极限学习机相结合的混合算法,通过优化权重来提高网络的拟合能力和性能。该代码可以用于各种需要回归或分类的问题,如数据预测、图像识别等。 ### 回答2: GA-ELM (遗传算法优化极限学习机) 是一种基于遗传算法优化极限学习机算法。极限学习机(ELM)是一种单隐层前馈神经网络算法,通过随机初始化网络的输入层到隐层之间的权重和隐层到输出层之间的权重,然后使用最小二乘法来求解这些权重,从而实现模型的训练。 GA-ELM 在ELM的基础上加入了遗传算法优化机制,通过遗传算法来调节ELM的网络结构和权重,进一步提高了模型的性能和泛化能力。 在MATLAB实现GA-ELM算法,可以按照以下步骤进行: 1. 随机初始化ELM网络的输入层到隐层之间的权重和隐层到输出层之间的权重,在一定范围内进行初始化。 2. 定义适应度函数,用来评估每个个体的适应性。适应度函数可以根据具体问题的要求来确定,常用的评价指标包括均方根误差(RMSE)和相关系数(Correlation Coefficient)等。 3. 利用遗传算法的操作(选择、交叉、变异等)对ELM的权重进行优化遗传算法的基本步骤包括种群初始化、适应度评估、选择操作、交叉操作、变异操作等。 4. 对优化后的ELM进行测试和评估,计算模型在测试集上的性能指标,例如RMSE或Correlation Coefficient。 5. 根据模型的性能,可以对GA-ELM的参数进行调优,例如种群大小、交叉概率、变异概率等。 通过上述步骤,我们可以实现GA-ELM算法的MATLAB代码。根据具体的问题和数据集,我们可以对代码进行相应的调整和优化,以获得更好的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CJ-leaf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值