引力搜索算法極限學(xué)習(xí)機GSA-ELM回歸預(yù)測及其MATLAB代碼實現(xiàn)
?作者簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進(jìn),matlab項目合作可私信。
??個人主頁:Matlab科研工作室
??個人信條:格物致知。
更多Matlab仿真內(nèi)容點擊??
智能優(yōu)化算法 ?神經(jīng)網(wǎng)絡(luò)預(yù)測 雷達(dá)通信 無線傳感器
信號處理 圖像處理 路徑規(guī)劃 元胞自動機 無人機
? 內(nèi)容介紹
極限學(xué)習(xí)機(Extreme Learning Machine, ELM)是近幾年發(fā)展起來的一種有效的新型單隱層前饋神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法,和傳統(tǒng)學(xué)習(xí)算法不同的是,ELM算法的網(wǎng)絡(luò)參數(shù)隨機選取,無需調(diào)節(jié),輸出權(quán)值是通過對平方損失函數(shù)最小化得到的最小二乘解,因此該算法具有較快的學(xué)習(xí)速度和良好的泛化性能,并在多模式分類,非線性預(yù)測等領(lǐng)域得到了廣泛的應(yīng)用.但是ELM在學(xué)習(xí)過程中也不可避免的存在眾多缺點,其參數(shù)的隨機選取導(dǎo)致一系列非最優(yōu)參數(shù)的生成,使得所需隱含層節(jié)點數(shù)多于傳統(tǒng)學(xué)習(xí)算法,影響其泛化性能,并導(dǎo)致系統(tǒng)的病態(tài);在學(xué)習(xí)過程中僅僅只利用了輸入?yún)?shù)的信息進(jìn)行計算,而忽略了非常有價值的實際輸出值;將其應(yīng)用于工業(yè)生產(chǎn)中所得到的精度不能滿足實際的標(biāo)準(zhǔn)等等.針對上述缺點,本文提出了一種對ELM的引力搜索算法極限學(xué)習(xí)機(GSA-ELM)。
1 引力搜索算法原理
GSA是2009年提出的一種新型的啟發(fā)式群智能優(yōu)化算法,具有全局搜索能力強、收斂速度快等優(yōu)點。在GSA中,種群粒子相當(dāng)于空間中運動的個體,這些個體在萬有引力的作用下彼此吸引、運動,個體的質(zhì)量是評價粒子好壞的標(biāo)準(zhǔn),質(zhì)量越大的個體吸引其他粒子的能力越強,即表示其對應(yīng)的解更好,整個種群憑借粒子相互間力的作用相互運動實現(xiàn)信息的共享,并朝著最優(yōu)區(qū)域展開搜索。

2 極限學(xué)習(xí)機
傳統(tǒng)的單隱層神經(jīng)網(wǎng)絡(luò)由三部分組成,分別是輸入層、隱含層和輸出層,輸入層神經(jīng)元節(jié)點個數(shù)即輸入變量的個數(shù),隱含層節(jié)點個數(shù)則需要人為給定,輸出層節(jié)點個數(shù)也就是輸出變量的個數(shù)。在2006年,新加坡南洋理工大學(xué)的Huang等[16]在傳統(tǒng)的單隱層神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上提出了一種新的前饋神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法,命名為極限學(xué)習(xí)機(extremelearningmachine,ELM),不同于傳統(tǒng)的基于梯度的前饋神經(jīng)網(wǎng)絡(luò)算法,該方法隨機產(chǎn)生隱含層與輸入層之間的連接權(quán)值及隱含層神經(jīng)元的閾值,訓(xùn)練過程中只需要設(shè)置隱含神經(jīng)元的個數(shù)便可獲得唯一最優(yōu)解,極限學(xué)習(xí)機網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。

3 引力搜索算法優(yōu)化極限學(xué)習(xí)機
本文采用引力搜索算法對其隱含層的初始權(quán)值與閾值進(jìn)行優(yōu)化,具體構(gòu)建過程可以概述為:確定ELM的輸入與輸出樣本集;確定對ELM初始權(quán)值及閾值的編碼方式;隨機采樣產(chǎn)生第一代種群;計算每個個體的適應(yīng)值,并排序選優(yōu);按照既定規(guī)則更新產(chǎn)生下一代種群直至滿足終止條件為止,終止條件設(shè)置為預(yù)測值與期望值的誤差矩陣的范數(shù)小于某一設(shè)定值。
利用引力搜索算法對核極限學(xué)習(xí)機的兩項參數(shù):核參數(shù)及正則化系數(shù)進(jìn)行優(yōu)化,得到耦合滑坡預(yù)測模型,其實施步驟如下。
步驟1初始化種群。設(shè)置粒子數(shù)量為20,隨機產(chǎn)生初始核參數(shù)及正則化系數(shù),生成種群初始位置。
步驟2確定優(yōu)化參數(shù)的取值范圍。根據(jù)多次實驗,確定核參數(shù)為(-100 100),正則化系數(shù)為(-100 100)。
步驟3建立SSA-KELM耦合模型,計算粒子個體適應(yīng)度,對適應(yīng)度值進(jìn)行排序,尋找出當(dāng)前最好和最差的個體。

適應(yīng)度函數(shù)為式(16)中為真實值;為函數(shù)預(yù)測值。
步驟4根據(jù)式式(7)更新粒子位置。
步驟5獲取新的粒子位置及個體適應(yīng)度值,將本輪最優(yōu)適應(yīng)度值與之前的最優(yōu)適應(yīng)度值做比較,如果本輪更優(yōu),則更新全局最優(yōu)適應(yīng)度值與相關(guān)位數(shù)。
步驟6循環(huán)結(jié)束。當(dāng)?shù)螖?shù)大于500,則尋優(yōu)過程結(jié)束。步驟7得到KELM的最佳訓(xùn)練參數(shù),模型建立。
? 部分代碼
function [output] = my_map(type, raw_data, raw_data_max, raw_data_min, max, min)
if type ~= 0
? ? output = my_pos_map(raw_data, raw_data_max, raw_data_min, max, min);
end
if type ~= 1?
? ? output = my_rev_map(raw_data, raw_data_max, raw_data_min, max, min);
end
end
function [out] = my_pos_map(raw_data, raw_data_max, raw_data_min, max, min)
? ? for i = 1:length(raw_data')
? ? ? ? out(i) = (max - min) * (raw_data(i) - raw_data_min) / (raw_data_max - raw_data_min) + min;
? ? end
end
function [out] = my_rev_map(raw_data, raw_data_max, raw_data_min, max, min)
? ? for i = 1:length(raw_data')
? ? ? ? out(i) = (raw_data(i) - min) * (raw_data_max - raw_data_min) / (max - min) + raw_data_min;
? ? end
end
? 運行結(jié)果



? 參考文獻(xiàn)
[1]劉萌萌. 基于信息融合的改進(jìn)極限學(xué)習(xí)機預(yù)測算法研究[D]. 遼寧大學(xué), 2015.
[2]劉藝凡. 基于萬有引力搜索算法極限學(xué)習(xí)機的電磁問題優(yōu)化[D]. 江蘇科技大學(xué).