【DELM分類】基于螢火蟲算法改進(jìn)深度學(xué)習(xí)極限學(xué)習(xí)機(jī)實(shí)現(xiàn)數(shù)據(jù)分類附matlab代碼
1 簡介
人工神經(jīng)網(wǎng)絡(luò)的最大缺點(diǎn)是訓(xùn)練時(shí)間太長從而限制其實(shí)時(shí)應(yīng)用范圍,近年來,極限學(xué)習(xí)機(jī)(Extreme Learning Machine, ELM)的提出使得前饋神經(jīng)網(wǎng)絡(luò)的訓(xùn)練時(shí)間大大縮短,然而當(dāng)原始數(shù)據(jù)混雜入大量噪聲變量時(shí),或者當(dāng)輸入數(shù)據(jù)維度非常高時(shí),極限學(xué)習(xí)機(jī)算法的綜合性能會(huì)受到很大的影響.深度學(xué)習(xí)算法的核心是特征映射,它能夠摒除原始數(shù)據(jù)中的噪聲,并且當(dāng)向低維度空間進(jìn)行映射時(shí),能夠很好的起到對(duì)數(shù)據(jù)降維的作用,因此我們思考利用深度學(xué)習(xí)的優(yōu)勢(shì)特性來彌補(bǔ)極限學(xué)習(xí)機(jī)的弱勢(shì)特性從而改善極限學(xué)習(xí)機(jī)的性能.為了進(jìn)一步提升DELM預(yù)測精度,本文采用麻雀搜索算法進(jìn)一步優(yōu)化DELM超參數(shù),仿真結(jié)果表明,改進(jìn)算法的預(yù)測精度更高。





2 部分代碼
%% 清空環(huán)境變量
clc;
clear;
%% 初始化參數(shù)
domx = [-3, 3; -3, 3]; ? ? ? % 定義域
rho = 0.9; ? ? ? ? ? ? ? ? ? % 熒光素?fù)]發(fā)因子
gamma = 0.1; ? ? ? ? ? ? ? ? % 適應(yīng)度提取比例
beta = 0.58; ? ? ? ? ? ? ? ? % 鄰域變化率
nt = 6; ? ? ? ? ? ? ? ? ? ? ?% 鄰域閥值(鄰域螢火蟲數(shù))
s = 0.03; ? ? ? ? ? ? ? ? ? ?% 步長
iot0 = 400; ? ? ? ? ? ? ? ? ?% 熒光素初始濃度
rs = 3; ? ? ? ? ? ? ? ? ? ? ?% 感知半徑
r0 = 3; ? ? ? ? ? ? ? ? ? ? ?% 決策半徑
m = size(domx, 1); ? ? ? ? ? % 函數(shù)空間維數(shù)
n = 50; ? ? ? ? ? ? ? ? ? ? ?% 螢火蟲數(shù)量
gaddress = zeros(n, m); ? ? ?% 分配螢火蟲地址空間
gvalue = zeros(n, 1); ? ? ? ?% 分配適應(yīng)度存放空間
ioti = zeros(n, 1); ? ? ? ? ?% 分配熒光素存放空間
rdi = zeros(n, 1); ? ? ? ? ? % 分配螢火蟲決策半徑存放空間
%% 螢火蟲常量初始化
% 初始化地址
for i = 1:m
? ?gaddress(:, i) = domx(i, 1)+(domx(i, 2)-domx(i, 1))*rand(n, 1);
end
% 初始化熒光素濃度
ioti(:, 1) = iot0;
% 初始化決策半徑
rdi(:, 1) = r0;
iter_max = 500; ? ? ? ? ? ?% 最大迭代次數(shù)
t = 1; ? ? ? ? ? ? ? ? ? ? % 迭代計(jì)數(shù)器
yy = zeros(iter_max, 1); ? % 各代最優(yōu)解
%% 迭代尋優(yōu)
while t <= iter_max
? ?% 更新熒光素濃度
? ?ioti = (1-rho)*ioti+gamma*fun(gaddress);
? ?% 各螢火蟲移動(dòng)過程開始
? ?for i = 1:n
? ? ? ?% 決策半徑內(nèi)找更優(yōu)點(diǎn)
? ? ? ?Nit = []; ? ? ? ? ? ? ? ? % 存放螢火蟲序號(hào)
? ? ? ?for j = 1:n
? ? ? ? ? ?if norm(gaddress(j, :)-gaddress(i, :)) < rdi(i) && ioti(i, 1) < ioti(j, 1)
? ? ? ? ? ? ? ?Nit(numel(Nit)+1) = j;
? ? ? ? ? ?end
? ? ? ?end
? ? ? ?% 找下一步移動(dòng)的點(diǎn)開始
? ? ? ?if ~isempty(Nit) ? ? ? ? ?
? ? ? ? ? ?Nitioti = ioti(Nit, 1); ? ? ? ? ? ? ?% 選出Nit熒光素
? ? ? ? ? ?SumNitioti = sum(Nitioti); ? ? ? ? ? % Nit熒光素和
? ? ? ? ? ?Molecular = Nitioti-ioti(i, 1); ? ? ?% 分子
? ? ? ? ? ?Denominator = SumNitioti-ioti(i, 1); % 分母
? ? ? ? ? ?Pij = Molecular./Denominator; ? % 計(jì)算Nit各元素被選擇概率
? ? ? ? ? ?Pij = cumsum(Pij); ? ? ? ?% 累計(jì)
? ? ? ? ? ?Pij = Pij./Pij(end); ? ? ?% 歸一化
? ? ? ? ? ?Pos = find(rand < Pij); ? % 確定位置
? ? ? ? ? ?j = Nit(Pos(1)); ? ? ? ? ?% 確定j的位置
? ? ? ? ? ?% 螢火蟲i向j移動(dòng)一小步
? ? ? ? ? ?gaddress(i, :) = gaddress(i, :)+s*(gaddress(j, :)-gaddress(i, :))/norm(gaddress(j, :)-gaddress(i, :));
? ? ? ? ? ?% 邊界處理(限制范圍)
? ? ? ? ? ?gaddress(i, :) = min(gaddress(i, :), domx(1, 2)); ? ? ? ?
? ? ? ? ? ?gaddress(i, :) = max(gaddress(i, :), domx(1, 1));
? ? ? ? ? ?% 更新決策半徑
? ? ? ? ? ?rdi(i) = rdi(i)+beta*(nt-length(Nit));
? ? ? ? ? ?if rdi(i, 1) < 0
? ? ? ? ? ? ? ?rdi(i, 1) = 0;
? ? ? ? ? ?end
? ? ? ? ? ?if rdi(i, 1) > rs
? ? ? ? ? ? ? ?rdi(i, 1) = rs;
? ? ? ? ? ?end
? ? ? ?end
? ?end
? ?% 每代最優(yōu)解存入yy數(shù)組內(nèi)
? ?yy(t) = max(fun(gaddress));
? ?% 迭代次數(shù)+1
? ?t = t+1;
end
%% 結(jié)果顯示
gvalue = fun(gaddress); ? ? ? ? ? ? ? % 求各個(gè)螢火蟲的值
disp('最大值為:')
num = find(gvalue == max(gvalue)); ? ?% 最大值序號(hào)
MaxValue = max(gvalue)
disp('最優(yōu)解為:')
BestAddress = gaddress(num, :)
figure;
plot(yy, 'r', 'linewidth', 2)
xlabel ('迭代次數(shù)'); ylabel( '函數(shù)值');
title( 'GSO算法各代最優(yōu)解變化');
3 仿真結(jié)果

4 參考文獻(xiàn)
[1]馬萌萌. 基于深度學(xué)習(xí)的極限學(xué)習(xí)機(jī)算法研究[D]. 中國海洋大學(xué), 2015.
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
