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





2 部分代碼
%% 清空環(huán)境變量
clc;
clear;
%% 初始化參數
domx = [-3, 3; -3, 3]; ? ? ? % 定義域
rho = 0.9; ? ? ? ? ? ? ? ? ? % 熒光素揮發(fā)因子
gamma = 0.1; ? ? ? ? ? ? ? ? % 適應度提取比例
beta = 0.58; ? ? ? ? ? ? ? ? % 鄰域變化率
nt = 6; ? ? ? ? ? ? ? ? ? ? ?% 鄰域閥值(鄰域螢火蟲數)
s = 0.03; ? ? ? ? ? ? ? ? ? ?% 步長
iot0 = 400; ? ? ? ? ? ? ? ? ?% 熒光素初始濃度
rs = 3; ? ? ? ? ? ? ? ? ? ? ?% 感知半徑
r0 = 3; ? ? ? ? ? ? ? ? ? ? ?% 決策半徑
m = size(domx, 1); ? ? ? ? ? % 函數空間維數
n = 50; ? ? ? ? ? ? ? ? ? ? ?% 螢火蟲數量
gaddress = zeros(n, m); ? ? ?% 分配螢火蟲地址空間
gvalue = zeros(n, 1); ? ? ? ?% 分配適應度存放空間
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; ? ? ? ? ? ?% 最大迭代次數
t = 1; ? ? ? ? ? ? ? ? ? ? % 迭代計數器
yy = zeros(iter_max, 1); ? % 各代最優(yōu)解
%% 迭代尋優(yōu)
while t <= iter_max
? ?% 更新熒光素濃度
? ?ioti = (1-rho)*ioti+gamma*fun(gaddress);
? ?% 各螢火蟲移動過程開始
? ?for i = 1:n
? ? ? ?% 決策半徑內找更優(yōu)點
? ? ? ?Nit = []; ? ? ? ? ? ? ? ? % 存放螢火蟲序號
? ? ? ?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
? ? ? ?% 找下一步移動的點開始
? ? ? ?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; ? % 計算Nit各元素被選擇概率
? ? ? ? ? ?Pij = cumsum(Pij); ? ? ? ?% 累計
? ? ? ? ? ?Pij = Pij./Pij(end); ? ? ?% 歸一化
? ? ? ? ? ?Pos = find(rand < Pij); ? % 確定位置
? ? ? ? ? ?j = Nit(Pos(1)); ? ? ? ? ?% 確定j的位置
? ? ? ? ? ?% 螢火蟲i向j移動一小步
? ? ? ? ? ?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數組內
? ?yy(t) = max(fun(gaddress));
? ?% 迭代次數+1
? ?t = t+1;
end
%% 結果顯示
gvalue = fun(gaddress); ? ? ? ? ? ? ? % 求各個螢火蟲的值
disp('最大值為:')
num = find(gvalue == max(gvalue)); ? ?% 最大值序號
MaxValue = max(gvalue)
disp('最優(yōu)解為:')
BestAddress = gaddress(num, :)
figure;
plot(yy, 'r', 'linewidth', 2)
xlabel ('迭代次數'); ylabel( '函數值');
title( 'GSO算法各代最優(yōu)解變化');
3 仿真結果

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