一、簡述
極限學習機是一種用于訓練單隱層前饋神經網絡的算法,由輸入層、隱藏層、輸出層組成。
基本原理:
輸入層接受傳入的樣本數據。
在訓練過程中隨機生成從輸入層到隱藏層的所有連接權重以及每個隱藏層神經元的偏置值,這些參數在整個訓練過程中不會被修改。
前向傳播:輸入數據通過已設定的權重和偏置傳遞給隱藏層,經過激活函數處理后產生隱藏層的輸出。
在得到隱藏層輸出后,需找到從隱藏層到輸出層的最佳權重。隱藏層到輸出層的映射可以視為一個線性系統,通過最小二乘法方法求解該線性系統的最優解。
利用廣義逆矩陣計算隱藏層到輸出層的連接權重,使得最后的輸出結果盡可能接近目標值。
下面matlab代碼使用極限學習機對光譜數據進行回歸分析,對樣本數據進行預測。?
二、代碼
clear
clc%導入數據
load spectra_data.mat%隨機產生訓練集和測試集
temp = randperm(size(NIR, 1));
% 訓練集
train_x = NIR(temp(1:50), :)';
train_y = octane(temp(1:50), :)';
% 測試集
test_x = NIR(temp(51:end), :)';
test_y = octane(temp(51:end), :)';
N = size(test_x, 2);%對訓練集和測試集進行歸一化處理
%訓練集
[train_X, inputps] = mapminmax(train_x);
test_X = mapminmax('apply', test_x, inputps);
%測試集
[train_Y, outputps] = mapminmax(train_y);
test_Y = mapminmax('apply', test_y, outputps);%訓練極限學習機模型
%傳入的第三個參數為隱藏層神經元的數量
%傳入的第四個參數表示激活函數的類型,'sig'表示用sigmoid函數作為隱藏層神經元的激活函數
%傳出參數:IW表示輸入權重;B表示隱藏層偏置;LW表示輸出權重;TF表示轉換函數;TYPE表示模型的類型
[IW, B, LW, TF, TYPE] = elmtrain(train_X, train_Y, 30, 'sig', 0);%測試
sim_Y = elmpredict(test_X, IW, B, LW, TF, TYPE);%對測試集預測結果進行反歸一化處理
sim_y = mapminmax('reverse', sim_Y, outputps);%用mse函數求出均方誤差
E = mse(sim_y - test_y);%繪圖
figure(1)
plot(1:N, test_y, 'r-*', 1:N, sim_y, 'b:o')
grid on
legend('真實值','預測值')
xlabel('樣本編號')
ylabel('辛烷值')