1 簡介
人工神經網絡的最大缺點是訓練時間太長進而限制其實時應用範圍,近年來,極限學習機(Extreme Learning Machine, ELM)的提出使得前饋神經網絡的訓練時間大大縮短,然而當原始資料混雜入大量噪聲變量時,或者當輸入資料次元非常高時,極限學習機算法的綜合性能會受到很大的影響.深度學習算法的核心是特征映射,它能夠摒除原始資料中的噪聲,并且當向低次元空間進行映射時,能夠很好的起到對資料降維的作用,是以我們思考利用深度學習的優勢特性來彌補極限學習機的弱勢特性進而改善極限學習機的性能.為了進一步提升DELM預測精度,本文采用麻雀搜尋算法進一步優化DELM超參數,仿真結果表明,改進算法的預測精度更高。
2 部分代碼
%% GA
clc % 清屏
clear all; % 删除workplace變量
close all; % 關掉顯示圖形視窗
warning off
%% 參數初始化
popsize=50; %種群規模
lenchrom=17; %變量字串長度
pc=0.7; %設定交叉機率,本例中交叉機率是定值,若想設定變化的交叉機率可用表達式表示,或從寫一個交叉機率函數,例如用神經網絡訓練得到的值作為交叉機率
pm=0.3; %設定變異機率,同理也可設定為變化的
load('Ereal.mat')
load('Freal.mat')
maxgen=500; % 進化次數
%定義弧的權矩陣和幾點換乘權矩陣
%種群
popmax=9;
popmin=1;
popmax2=0
popmin2=-4
bound=[popmin popmax;popmin2 popmax2;popmin popmax;popmin2 popmax2;popmin popmax;popmin2 popmax2;popmin popmax;popmin2 popmax2;popmin popmax;popmin2 popmax2;popmin popmax;popmin2 popmax2;popmin popmax;popmin2 popmax2;popmin popmax;popmin2 popmax2;popmin popmax]; %變量範圍
%% 産生初始粒子和速度
for i=1:popsize
%随機産生一個種群
GApop(i,:)=Code(lenchrom,popmax,bound,E); %随機産生個體,GApop是lenchrom和bound的一個函數,是100*7的矩陣,GApop(i,:)是1*7的一行數字,等于是對每個i去執行一次Code函數和test函數
%或者說Code函數指編碼過程,以lenchrom和bound為依據進行編碼
%Code經過檢驗後,GApop第i行指派為每一個Code列向量
%計算适應度
p=[]
for u=1:2:(lenchrom-2)
p=[p E(GApop(i,u),GApop(i,u+2),-GApop(i,u+1))]
end
q=[]
for j=3:2:(lenchrom-2)
q=[q F(-GApop(i,j-1),-GApop(i,j+1),GApop(i,j))]
end
fitness(i)=sum(p)+sum(q); %染色體的适應度
end
%找最好的染色體
[bestfitness bestindex]=min(fitness); %min函數左側是适應度矩陣(1*100)中最佳值和對應位置,bestindex為什麼不是最優的位置(是生成的第一批的最優和位置)
zbest=GApop(bestindex,:); %全局最佳,最佳位置對應的染色體向量
gbest=GApop; %個體最佳,100*7矩陣
fitnessgbest=fitness; %個體最佳适應度值,指同樣的函數式
fitnesszbest=bestfitness; %全局最佳适應度值,同上
%% 疊代尋優
for i=1:maxgen
i
%種群更新 GA選擇更新
GApop=Select2(GApop,fitness,popsize); %産生了輪盤賭選出的100個染色體
% 交叉操作 GA
GApop=Cross(pc,lenchrom,GApop,popsize,bound,E);
%這裡删掉了兩個操作
% 變異操作 GA變異
GApop=Mutation(pm,lenchrom,GApop,popsize,[i maxgen],bound,popmax,E);
% 元素删除 GA變異
GApop=Mutation2(pm,lenchrom,GApop,popsize,[i maxgen],bound,E);
pop=GApop;
for j=1:popsize
%适應度值
p=[]
for u=1:2:(lenchrom-2)
p=[p E(GApop(j,u),GApop(j,u+2),-GApop(j,u+1))]
end
q=[]
for v=3:2:(lenchrom-2)
q=[q F(-pop(j,v-1),-pop(j,v+1),pop(j,v))]
end
fitness(j)=sum(p)+sum(q); %染色體的适應度
%對每個滿足限制的個體計算适應度(不符合就不更新)
%個體最優更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j); %每一代如果适應度變小就更新,否則不更新;輸出的fitness 是最後一代的适應度
end
%群體最優更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j); %兩次更新都循環100次,每一個fitness(j)都和兩個數比一遍
end
end
yy(i)=fitnesszbest;
end
%% 結果
disp '*************best particle number****************'
zbest
%%
plot(yy,'linewidth',2);
title(['适應度曲線 ' '終止代數=' num2str(maxgen)]);
xlabel('進化代數');ylabel('适應度');
grid on