時序預(yù)測 | MATLAB實(shí)現(xiàn)PSO-KELM粒子群算法優(yōu)化核極限學(xué)習(xí)機(jī)時間序列預(yù)測(含KELM、ELM等對比)
預(yù)測效果
基本介紹
MATLAB實(shí)現(xiàn)PSO-KELM粒子群算法優(yōu)化核極限學(xué)習(xí)機(jī)時間序列預(yù)測(含KELM、ELM等對比)(完整源碼和數(shù)據(jù))
模型介紹
PSO-KELM,常用于時間序列預(yù)測任務(wù)。
PSO是一種基于群體智能的優(yōu)化算法,它模擬了鳥群覓食的行為。在PSO中,每個個體被稱為粒子,代表了解空間中的一個候選解。粒子通過在解空間中搜索來尋找最優(yōu)解,同時根據(jù)個體最優(yōu)和全局最優(yōu)的信息進(jìn)行調(diào)整和更新。PSO算法通過迭代更新粒子的位置和速度來逐步優(yōu)化解的質(zhì)量。
PSO-KELM的時間序列預(yù)測步驟如下:
準(zhǔn)備時間序列數(shù)據(jù)集,將其劃分為訓(xùn)練集和測試集。
初始化PSO算法的粒子群,并隨機(jī)初始化粒子的位置和速度。
對于每個粒子,使用KELM算法,其中隱藏層的連接權(quán)重和偏置通過PSO進(jìn)行優(yōu)化。
根據(jù)訓(xùn)練得到的模型,對測試集進(jìn)行預(yù)測。
評估預(yù)測結(jié)果的準(zhǔn)確性。
根據(jù)預(yù)測準(zhǔn)確性和PSO的優(yōu)化目標(biāo),更新粒子的速度和位置。
重復(fù)步驟3至步驟6,直到達(dá)到預(yù)定的迭代次數(shù)或滿足停止準(zhǔn)則。
根據(jù)最優(yōu)的粒子位置得到最終的連接權(quán)重和偏置,用于進(jìn)行時間序列的預(yù)測。
需要注意的是,PSO-KELM算法的性能和結(jié)果可能會受到參數(shù)設(shè)置的影響,例如粒子數(shù)、迭代次數(shù)、網(wǎng)絡(luò)的隱藏層節(jié)點(diǎn)數(shù)等。因此,在實(shí)際應(yīng)用中需要根據(jù)具體問題進(jìn)行調(diào)優(yōu)和參數(shù)選擇。文章來源:http://www.zghlxwxcb.cn/news/detail-676229.html
程序設(shè)計
- 完整程序和數(shù)據(jù)下載地址方式:私信博主回復(fù)MATLAB實(shí)現(xiàn)PSO-KELM粒子群算法優(yōu)化核極限學(xué)習(xí)機(jī)時間序列預(yù)測(含KELM、ELM等對比。
%% 各算法對比
clc;clear;close all
%%
Positions = initialization(SearchAgents_no, dim, ub, lb);
%% 用于記錄迭代曲線
Convergence_curve = zeros(1, Max_iteration);
%% 循環(huán)計數(shù)器
iter = 0;
%% 優(yōu)化算法主循環(huán)
while iter < Max_iteration % 對迭代次數(shù)循環(huán)
for i = 1 : size(Positions, 1) % 遍歷
Flag4ub = Positions(i, :) > ub;
Flag4lb = Positions(i, :) < lb;
% 若的位置在最大值和最小值之間,則位置不需要調(diào)整,若超出最大值,最回到最大值邊界
% 若超出最小值,最回答最小值邊界
Positions(i, :) = (Positions(i, :) .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;
% 計算適應(yīng)度函數(shù)值
% Positions(i, 2) = round(Positions(i, 2));
% fitness = fical(Positions(i, :));
fitness = fobj(Positions(i, :));
% 更新 Alpha, Beta, Delta
if fitness < Alpha_score % 如果目標(biāo)函數(shù)值小
if fitness > Alpha_score && fitness > Beta_score &&
Delta_score = fitness; % 則將Delta的目標(biāo)函數(shù)值更新為最優(yōu)目標(biāo)函數(shù)值
Delta_pos = Positions(i, :); % 同時更新Delta的位置
end
end
% 線性權(quán)重遞減
wa = 2 - iter * ((2) / Max_iteration);
% 更新搜索群的位置
for i = 1 : size(Positions, 1) % 遍歷每個
for j = 1 : size(Positions, 2) % 遍歷每個維度
% 包圍獵物,位置更新
r1 = rand; % r1 is a random number in [0,1]
r2 = rand; % r2 is a random number in [0,1]
A1 = 2 * wa * r1 - wa; % 計算系數(shù)A,Equation (3.3)
C1 = 2 * r2; % 計算系數(shù)C,Equation (3.4)
% Alpha 位置更新
D_alpha = abs(C1 * Alpha_pos(j) - Positions(i, j)); % Equation (3.5)-part 1
X1 = Alpha_pos(j) - A1 * D_alpha; % Equation (3.6)-part 1
r1 = rand; % r1 is a random number in [0,1]
r2 = rand; % r2 is a random number in [0,1]
A2 = 2 * wa * r1 - wa; % 計算系數(shù)A,Equation (3.3)
C2 = 2 *r2; % 計算系數(shù)C,Equation (3.4)
% Beta 位置更新
D_beta = abs(C2 * Beta_pos(j) - Positions(i, j)); % Equation (3.5)-part 2
X2 = Beta_pos(j) - A2 * D_beta; % Equation (3.6)-part 2
r1 = rand; % r1 is a random number in [0,1]
r2 = rand; % r2 is a random number in [0,1]
A3 = 2 *wa * r1 - wa; % 計算系數(shù)A,Equation (3.3)
C3 = 2 *r2; % 計算系數(shù)C,Equation (3.4)
% Delta 位置更新
D_delta = abs(C3 * Delta_pos(j) - Positions(i, j)); % Equation (3.5)-part 3
X3 = Delta_pos(j) - A3 * D_delta; % Equation (3.5)-part 3
% 位置更新
Positions(i, j) = (X1 + X2 + X3) / 3; % Equation (3.7)
end
end
% 更新迭代器
iter = iter + 1;
Convergence_curve(iter) = Alpha_score;
curve(iter)=sum(Convergence_curve)/iter;
disp(['第',num2str(iter),'次迭代'])
disp(['current iteration is: ',num2str(iter), ', best fitness is: ', num2str(Alpha_score)]);
end
%% 記錄最佳參數(shù)
% best_lr = Alpha_pos(1, 1);
% best_hd = Alpha_pos(1, 2);
% best_l2 = Alpha_pos(1, 3);
end
function result(true_value,predict_value,type)
disp(type)
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])
mae=mean(abs(true_value-predict_value));
disp(['平均絕對誤差(MAE):',num2str(mae)])
mape=mean(abs((true_value-predict_value)./true_value));
disp(['平均相對百分誤差(MAPE):',num2str(mape*100),'%'])
r2 = R2(predict_value, true_value);
disp(['R平方?jīng)Q定系數(shù)(MAPE):',num2str(r2)])
nse = NSE(predict_value, true_value);
disp(['納什系數(shù)(NSE):',num2str(nse)])
fprintf('\n')
參考資料
[1] https://blog.csdn.net/kjm13182345320?spm=1010.2135.3001.5343
[2] https://mianbaoduo.com/o/bread/mbd-YpiamZpq
[3] SI Y W,YIN J. OBST-based segmentation approach to financial time series[J]. Engineering Applications of Artificial Intelligence,2013,26( 10) : 2581-2596.
[4] YUAN X,CHEN C,JIANG M,et al. Prediction Interval of Wind Power Using Parameter Optimized Beta Distribution Based LSTM Model[J]. Applied Soft Computing,2019,82:105550.143文章來源地址http://www.zghlxwxcb.cn/news/detail-676229.html
致謝
- 大家的支持是我寫作的動力!
- 感謝大家訂閱,記得備注!
到了這里,關(guān)于時序預(yù)測 | MATLAB實(shí)現(xiàn)PSO-KELM粒子群算法優(yōu)化核極限學(xué)習(xí)機(jī)時間序列預(yù)測(含KELM、ELM等對比)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!