您當前的位置:首頁 > 體育

[03]基於遺傳演算法最佳化極限學習機預測及其MATLAB程式碼實現步驟

作者:由 歲月靜好 發表于 體育時間:2021-09-03

1 極限學習機ELM原理

ELM預測相關理論可檢視上一篇文章:

簡單的ELM預測程式碼如下:

%

初始化

clear

close

all

clc

warning

off

rng

default

P

=

randi

([

1

10

],

3

100

);

%

構建訓練資料的輸入樣本

T

=

sum

P

1

);

%

構建訓練資料的輸出樣本

P1

=

randi

([

1

10

],

3

10

);

%

構建測試資料的輸入樣本

T1

=

sum

P1

1

);

%

構建測試資料的輸出樣本

%

歸一化

。。。

使用

mapminmax函式即可

,由於生成的資料無量綱和數量級差異,跳過

%%

ELM訓練過程

N

=

3

%

輸入層的神經元節點個數

L

=

30

%

隱含層的神經元節點個數

M

=

1

%

輸出層的神經元節點個數

IW

=

2

*

rand

L

N

-

1

%

初始化輸入層與隱含層的連線權值,範圍

-

1

1

B

=

rand

L

1

);

%

初始化隱含層的偏置,範圍

0

1

tempH

=

IW

*

P

+

B

%

計算隱含層的輸出值

h

=

1。

/

1

+

exp

tempH

));

%

使用對映函式

G

x

=

1

/

1

+

exp

x

))

h為隱含層對第樣本特徵的對映值

LW

=

pinv

h

*

T

%

求逆,得到輸出層的權值,結束訓練(轉置是為了讓維度對應)

%%

ELM預測過程

tempH1

=

IW

*

P1

+

B

%

計算隱含層輸出值

h1

=

1。

/

1

+

exp

tempH1

));

%

對特徵作對映

ELM_OUT

=

h1

*

LW

%%

分析預測的誤差

error

=

T1

-

ELM_OUT

%

誤差

=

實際值

-

預測值

disp

序號

期望值

預測值

誤差’

disp

([

1

10

T1

ELM_OUT

error

disp

’誤差平方和

。。。

sse

=

sum

error

^

2

disp

’均方誤差

。。。

mse

=

mean

error

^

2

disp

’平均相對誤差

。。。

mape

=

mean

abs

error

)。

/

T1

%

作圖分析預測的效果

figure

hold

on

plot

1

10

T1

bo

‘,’

linewidth

1。0

plot

1

10

ELM_OUT

r

*-

‘,’

linewidth

1。0

legend

’期望值

‘,’

預測值‘

xlabel

’測試樣本序號‘

ylabel

’指標的值‘

2 基於GA-ELM預測模型的建立

在理論與程式碼的實現過程中,注意到存在兩個隨機變數: 輸入層與隱含層的連線權值IW,以及隱含層的閾值B。

IW

=

2

*

rand

L

N

-

1

%

隨機初始化權值,服從

-

1

1

均勻分佈

B

=

rand

L

1

);

%

隨機初始化閾值,服從

0

1

均勻分佈

針對ELM 隨機產生的輸入層權值和隱含層閾值導致網路不穩定的問題,採用遺傳演算法對極限學習機的權值和閾值進行最佳化,從而降低預測誤差值,改善網路效能,得以提升ELM預測精度。

2。1 最佳化變數的處理

設極限學習機的輸入層神經元節點數目為 n , 隱含層節點數目為 l ,

輸入層與隱含層的連線權值為 ω :

\omega=\left[\begin{array}{cccc} \omega_{11} & \omega_{12} & \cdots & \beta_{1 n} \\ \omega_{21} & \omega_{22} & \cdots & \beta_{2 n} \\ \vdots & \vdots & \vdots & \vdots \\ \omega_{l 1} & \omega_{l 2} & \cdots & \beta_{l n} \end{array}\right]_{l \times n}

隱含層的閾值為 b :

b=\left[\begin{array}{c} b_{1} \\ b_{2} \\ \vdots \\ b_{l} \end{array}\right]_{l \times 1}

式中, ω 、 b分別為矩陣和列向量。使用遺傳演算法等智慧演算法求解時,對於最佳化變數,採用向量型編碼個體位置的方法操作較為簡單。此外,還有矩陣編碼,二進位制編碼等編碼方式。此處採用向量型的浮點編碼。

做法是: 先確定 ω 與 b 中元素變數的總數: n × l + l,再生成等長度的初始種群位置向量。由 n 個個體組成的父代可表示如下:

X=\left[\begin{array}{cccc} x_{1}^{1} & x_{1}^{2} & \ldots & x_{1}^{d} \\ x_{2}^{1} & x_{2}^{2} & \ldots & x_{2}^{d} \\ \ldots & \ldots & \ldots & \cdots \\ x_{n}^{1} & x_{n}^{2} & \ldots & x_{n}^{d} \end{array}\right]

式中, d是變數維度, 且 d = n × l + l 。

2。2 目標函式的處理

根據ELM的訓練公式:

\|\boldsymbol{H} \boldsymbol{\beta}-\boldsymbol{T}\|^{2}=0

對上式求逆,解出輸出層的權值 β,可得到一個訓練好的極限學習機模型。因而當該方程可解 ( H 的逆矩陣存在) 時,得到的模型對訓練樣本是無誤差的。GA最佳化目的是針對隨機初始化權值閾值帶來的網路預測不穩定,透過最佳化權值和閾值,提升預測精度。因此,將訓練集與測試集整體的均方誤差作為適應度函式。適應度函式值越小,表明訓練越準確,且兼顧模型的預測精度更好。

F=\min \left(M S E_{\text {Trainingset }, \text { Testingset }}\right)

式中,TraingingSet,TestingSet,分別為訓練集和測試集的樣本。

2。3 流程圖設計

[03]基於遺傳演算法最佳化極限學習機預測及其MATLAB程式碼實現步驟

3 基於GA-ELM模型的身體脂肪預測應用

3。1 資料介紹

身體脂肪資料集 bodyfatDataset 是深度學習中常用的預測資料集,對該資料集的描述如下:

bodyfatInputs - a 13x252 matrix defining thirteen attributes for 252

people。

1。 Age (years)

2。 Weight (lbs)

3。 Height (inches)

4。 Neck circumference (cm)

5。 Chest circumference (cm)

6。 Abdomen 2 circumference (cm)

7。 Hip circumference (cm)

8。 Thigh circumference (cm)

9。 Knee circumference (cm)

10。 Ankle circumference (cm)

11。 Biceps (extended) circumference (cm)

12。 Forearm circumference (cm)

13。 Wrist circumference (cm)

bodyfatTargets - a 1x252 matrix of associated body fat percentages,

to be estimated from the inputs。

整理到EXCEL中, 資料形式如下:

[03]基於遺傳演算法最佳化極限學習機預測及其MATLAB程式碼實現步驟

3。2 資料處理

由於不同變數的單位和取值範圍差異較大,為了消除變數之間數量級的差別避免造成預測誤差,以及方便求解,將資料進行歸一化處理是實現預測前對資料常做的處理。採用MATLAB 自帶歸一化函式mapmin max 將所有資料都轉化為[- 1,1]之間的資料。函式呼叫方式如下:

[pn,ps] = mapminmax( p)

式中, p是輸入原始資料, pn 是歸一化的資料, ps是記錄資料歸一化操作的結構體。輸出資料的歸一化同理,預測完成後同樣利用此函式進行反歸一化,獲得真實資料。

3。3 GA-ELM預測演算法的步驟

初始化染色體種群編碼。將極限學習機的輸入層權值與隱含層閾值元素取出,並計算染色體長度。隨機初始化染色體。

設定適應度函式。利用ELM對樣本的預測輸出誤差作為適應度函式,計算初始種群中個體的適應度值。

進行選擇、交叉、變異操作。採用輪盤賭選擇時,對於適應度函式,由於取的是均方誤差,在進化過程中,均方誤差減小,因此輪盤賭設計時適應度函式需取倒數,從而選擇“適應度大”的個體。

計算子代個體的適應度,並與父代個體合併,留下適應度值較好的個體構成新的子代種群。

反覆迭代執行3和4步,直到迭代次數達到設定的最大值。

輸出最好的染色體資訊。對適應度值最好的染色體進行解碼,並將解碼後得到的權值和閾值賦給預測使用的ELM。

以最優的權值和閾值初始化ELM 的引數,獲得最優的網路結構。最後測試網路的預測精度。

3。4 組合模型的引數設定

確定ELM的結構引數:

% 1。 輸入層神經元節點數,

inputnum=size(input,2); % input的行向對應輸入指標個數

% 2。 輸出層的神經元節點數,

outputnum=size(output,2); % output的行向對應輸出指標個數

disp(’/‘)

disp(’極限學習機ELM結構。。。‘)

disp([’輸入層的節點數為:‘,num2str(inputnum)])

disp([’輸出層的節點數為:‘,num2str(outputnum)])

disp(’ ‘)

disp(’隱含層節點的確定過程。。。‘)

% 3。 確定隱含層的神經元節點個數

%注意:BP神經網路確定隱含層節點的方法是:採用經驗公式hiddennum=sqrt(m+n)+a,m為輸入層節點個數,n為輸出層節點個數,a一般取為1-10之間的整數

%在極限學習機中,該經驗公式往往會失效,設定較大的範圍進行隱含層節點數目的確定即可。

MSE=1e+5; %初始化最小誤差

for hiddennum=20:30

。。。

%更新最佳的隱含層節點

if minMse

MSE=minMse;

hiddennum_best=hiddennum;

end

初始化遺傳演算法的引數:

nvars=inputnum*hiddennum_best+hiddennum_best; %自變數個數

PopulationSize_Data=30; %種群規模

MaxGenerations_Data=50; %最大進化代數

CrossoverFraction_Data=0。8; %交叉機率

MigrationFraction_Data=0。2; %變異機率

4 執行結果

4.1 GA的進化曲線,含最優的適應度值與平均適應度

[03]基於遺傳演算法最佳化極限學習機預測及其MATLAB程式碼實現步驟

4.2 GA最佳化ELM預測的結果與誤差分析

[03]基於遺傳演算法最佳化極限學習機預測及其MATLAB程式碼實現步驟

4.3 最佳化前後的預測曲線對比 (綠色為實測值, 紅色為GA-ELM預測值, 藍色為ELM預測值)

[03]基於遺傳演算法最佳化極限學習機預測及其MATLAB程式碼實現步驟

————————————————

版權宣告:本文為CSDN博主「wishes61」的原創文章,遵循CC 4。0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

原文連結:基於遺傳演算法最佳化極限學習機預測及其MATLAB實現-附程式碼_wishes61的部落格-CSDN部落格

5 MATLAB程式碼

1。 ELM極限學習機迴歸預測的程式碼與資料地址

2。 遺傳演算法GA最佳化ELM極限學習機預測的程式碼與資料地址

3。 粒子群演算法PSO最佳化ELM極限學習機預測的程式碼與資料地址

4。 ELM極限學習機資料分類的程式碼與資料地址

標簽: ELM  隱含  適應度  預測  學習機