【DELM分類】基于獅群算法改進(jìn)深度學(xué)習(xí)極限學(xué)習(xí)機(jī)實(shí)現(xiàn)數(shù)據(jù)分類附matlab代碼
1 簡(jiǎn)介
人工神經(jīng)網(wǎng)絡(luò)的最大缺點(diǎn)是訓(xùn)練時(shí)間太長(zhǎng)從而限制其實(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ù)測(cè)精度,本文采用麻雀搜索算法進(jìn)一步優(yōu)化DELM超參數(shù),仿真結(jié)果表明,改進(jìn)算法的預(yù)測(cè)精度更高。





2 部分代碼
%_________________________________________________________________________%
%獅群算法 ? ? ? ? ? ? %
%_________________________________________________________________________%
function [Best_pos,Best_score,curve]=LSO(pop,Max_iter,lb,ub,dim,fobj)
beta = 0.5;%成年獅所占比列
Nc = round(pop*beta);%成年獅數(shù)量
Np = pop-Nc;%幼師數(shù)量
if(max(size(ub)) == 1)
? ub = ub.*ones(1,dim);
? lb = lb.*ones(1,dim); ?
end
%種群初始化
X0=initialization(pop,dim,ub,lb);
X = X0;
%計(jì)算初始適應(yīng)度值
fitness = zeros(1,pop);
for i = 1:pop
? fitness(i) = ?fobj(X(i,:));
end
[value, index]= min(fitness);%找最小值
GBestF = value;%全局最優(yōu)適應(yīng)度值
GBestX = X(index,:);%全局最優(yōu)位置
curve=zeros(1,Max_iter);
XhisBest = X;
fithisBest = fitness;
indexBest = index;
gbest = GBestX;
for t = 1: Max_iter
? ?%母獅移動(dòng)范圍擾動(dòng)因子計(jì)算
? ?stepf = 0.1*(mean(ub) - mean(lb));
? ?alphaf = stepf*exp(-30*t/Max_iter)^10;
? ?%幼獅移動(dòng)范圍擾動(dòng)因子計(jì)算
? ?alpha = (Max_iter - t)/Max_iter;
? ?%母獅位置更新
? for i = 1:Nc
? ? ? index = i;
? ? ? while(index == i)
? ? ? ?index = randi(Nc);%隨機(jī)挑選一只母獅
? ? ? end
? ? ? X(i,:) = (X(i,:) + X(index,:)).*(1 + alphaf.*randn())./2;
? end
? %幼師位置更新
? for i = Nc+1:pop
? ? ? q=rand;
? ? ? if q<=1/3
? ? ? ? ? X(i,:) = (gbest + XhisBest(i,:)).*( 1 + alpha.*randn())/2;
? ? ? elseif q>1/3&&q<2/3
? ? ? ? ? indexT = i;
? ? ? ? ? while indexT == i
? ? ? ? ? ?indexT = randi(Nc) + pop - Nc;%隨機(jī)位置
? ? ? ? ? end
? ? ? ? ? ?X(i,:) = (X(indexT,:) + XhisBest(i,:)).*( 1 + alpha.*randn())/2; ? ? ? ? ?
? ? ? else
? ? ? ? ? gbestT = ub + lb - gbest;
? ? ? ? ? ?X(i,:) = (gbestT + XhisBest(i,:)).*( 1 + alpha.*randn())/2;
? ? ? end ? ?
? end
? %邊界控制
? for j = 1:pop
? ? ? for a = 1: dim
? ? ? ? ? if(X(j,a)>ub)
? ? ? ? ? ? ? X(j,a) =ub(a);
? ? ? ? ? end
? ? ? ? ? if(X(j,a)<lb)
? ? ? ? ? ? ? X(j,a) =lb(a);
? ? ? ? ? end
? ? ? end
? end
? %計(jì)算適應(yīng)度值
? for j=1:pop
? ?fitness(j) = fobj(X(j,:));
? end
? for j = 1:pop
? ?if(fitness(j)<fithisBest(j))
? ? ? ?XhisBest(j,:) = X(j,:);
? ? ? ?fithisBest(j) = fitness(j);
? ?end
? ?if(fitness(j) < GBestF)
? ? ? ?GBestF = fitness(j);
? ? ? ?GBestX = X(j,:); ?
? ? ? ?indexBest = j;
? ?end
? end
? %% 獅王更新
? Temp = gbest.*(1 + randn().*abs(XhisBest(indexBest,:) - gbest));
? Temp(Temp>ub)=ub(Temp>ub);
? Temp(Temp<lb) = lb(Temp<lb);
? fitTemp = fobj(Temp);
? if(fitTemp<GBestF)
? ? ? GBestF =fitTemp;
? ? ? GBestX = Temp;
? ? ? X(indexBest,:)=Temp;
? ? ? fitness(indexBest) = fitTemp;
? end
? [value, index]= min(fitness);%找最小值
? gbest = X(index,:);%當(dāng)前代,種群最優(yōu)值
? curve(t) = GBestF;
end
Best_pos = GBestX;
Best_score = curve(end);
end
3 仿真結(jié)果


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