極限學習機matlab實戰

    一、極限學習機(ELM)原理

       極限學習機具有簡單的單隱層結構,屬于前饋 神經網絡,通過對隱層權重及偏置的隨機選擇來計 算輸出權值并完成學習,彌補了梯度算法易陷入局 部極小、過擬合等不足,同時該網絡具有高效的學習能力,泛化能力出色。極限學習機的原理圖如下圖所示。

極限學習機matlab實戰的圖1
極限學習機matlab實戰的圖2
極限學習機matlab實戰的圖3

     二、極限學習機代碼實戰

         本次實戰分為預測與分類,具體為:辛烷值的預測和鳶尾花的分類。

    1、辛烷值的預測

clear all

clc

%% 訓練集/測試集產生

load spectra_data.mat

% 隨機產生訓練集和測試集

temp = randperm(size(NIR,1));

% 訓練集——50個樣本

P_train = NIR(temp(1:50),:)';

T_train = octane(temp(1:50),:)';

% 測試集——10個樣本

P_test = NIR(temp(51:end),:)';

T_test = octane(temp(51:end),:)';

N = size(P_test,2);

%% 數據歸一化

% 訓練集

[Pn_train,inputps] = mapminmax(P_train);

Pn_test = mapminmax('apply',P_test,inputps);

% 測試集

[Tn_train,outputps] = mapminmax(T_train);

Tn_test = mapminmax('apply',T_test,outputps);

%% ELM創建/訓練

[IW,B,LW,TF,TYPE] = elmtrain(Pn_train,Tn_train,30,'sig',0);

%% ELM仿真測試

tn_sim = elmpredict(Pn_test,IW,B,LW,TF,TYPE);

% 反歸一化

T_sim = mapminmax('reverse',tn_sim,outputps);

%% 結果對比

result = [T_test' T_sim'];

% 均方誤差

E = mse(T_sim - T_test);

% 決定系數

N = length(T_test);

R2=(N*sum(T_sim.*T_test)-sum(T_sim)*sum(T_test))^2/((N*sum((T_sim).^2)-(sum(T_sim))^2)*(N*sum((T_test).^2)-(sum(T_test))^2)); 

%% 繪圖

figure(1)

plot(1:N,T_test,'r-*',1:N,T_sim,'b:o')

grid on

legend('真實值','預測值')

xlabel('樣本編號')

ylabel('辛烷值')

string = {'測試集辛烷值含量預測結果對比(ELM)';['(mse = ' num2str(E) ' R^2 = ' num2str(R2) ')']};

title(string)

    結果顯示

極限學習機matlab實戰的圖4

   2、鳶尾花的分類

clear all

clc

%% 訓練集/測試集產生

load iris_data.mat

% 隨機產生訓練集和測試集

P_train = [];

T_train = [];

P_test = [];

T_test = [];

for i = 1:3

    temp_input = features((i-1)*50+1:i*50,:);

    temp_output = classes((i-1)*50+1:i*50,:);

    n = randperm(50);

    % 訓練集——120個樣本

    P_train = [P_train temp_input(n(1:40),:)'];

    T_train = [T_train temp_output(n(1:40),:)'];

    % 測試集——30個樣本

    P_test = [P_test temp_input(n(41:50),:)'];

    T_test = [T_test temp_output(n(41:50),:)'];

end

%% ELM創建/訓練

[IW,B,LW,TF,TYPE] = elmtrain(P_train,T_train,20,'sig',1);

%% ELM仿真測試

T_sim_1 = elmpredict(P_train,IW,B,LW,TF,TYPE);

T_sim_2 = elmpredict(P_test,IW,B,LW,TF,TYPE);

%% 結果對比

result_1 = [T_train' T_sim_1'];

result_2 = [T_test' T_sim_2'];

% 訓練集正確率

k1 = length(find(T_train == T_sim_1));

n1 = length(T_train);

Accuracy_1 = k1 / n1 * 100;

disp(['訓練集正確率Accuracy = ' num2str(Accuracy_1) '%(' num2str(k1) '/' num2str(n1) ')'])

% 測試集正確率

k2 = length(find(T_test == T_sim_2));

n2 = length(T_test);

Accuracy_2 = k2 / n2 * 100;

disp(['測試集正確率Accuracy = ' num2str(Accuracy_2) '%(' num2str(k2) '/' num2str(n2) ')'])

%% 繪圖

figure(2)

plot(1:30,T_test,'bo',1:30,T_sim_2,'r-*')

grid on

xlabel('測試集樣本編號')

ylabel('測試集樣本類別')

string = {'測試集預測結果對比(ELM)';['(正確率Accuracy = ' num2str(Accuracy_2) '%)' ]};

title(string)

legend('真實值','ELM預測值')

結果顯示

極限學習機matlab實戰的圖5

參考文獻:

[1] 史峰,王輝等,智能算法30個案例分析,北京航空航天大學出版社

[2]王雨虹,孟瑤瑤等優化極限學習機的煤與瓦斯突出預測方法[J].控制工程,2022

如有侵權,請聯系作者刪除~

本期的分享就到這里,關注我后續分享更多編程知識~

作 者 | 華 夏
編 輯 | 華 夏
校 對 | 華 夏

文章來源:matlab學習之家

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

2
1