SCI一區級 | Matlab實現RIME-CNN-LSTM-Multihead-Attention多變量多步時序預測
目錄
- SCI一區級 | Matlab實現RIME-CNN-LSTM-Multihead-Attention多變量多步時序預測
- 預測效果
- 基本介紹
- 程序設計
- 參考資料
預測效果
基本介紹
1.Matlab實現RIME-CNN-LSTM-Multihead-Attention霜冰算法優化卷積長短期記憶神經網絡融合多頭注意力機制多變量多步時間序列預測,算法優化學習率,卷積核大小,神經元個數,以最小MAPE為目標函數;
CNN卷積核大小:卷積核大小決定了CNN網絡的感受野,即每個卷積層可以捕獲的特征的空間范圍。選擇不同大小的卷積核可以影響模型的特征提取能力。較小的卷積核可以捕獲更細粒度的特征,而較大的卷積核可以捕獲更宏觀的特征。
LSTM神經元個數:LSTM是一種適用于序列數據的循環神經網絡,其神經元個數決定了模型的復雜性和記憶能力。較多的LSTM神經元可以提高模型的學習能力,但可能導致過擬合。
學習率:學習率是訓練深度學習模型時的一個關鍵超參數,它控制每次參數更新的步長。學習率過大可能導致模型不穩定和發散,學習率過小可能導致訓練過慢或陷入局部最小值。
多頭自注意力層 (Multihead-Self-Attention):Multihead-Self-Attention多頭注意力機制是一種用于模型關注輸入序列中不同位置相關性的機制。它通過計算每個位置與其他位置之間的注意力權重,進而對輸入序列進行加權求和。注意力能夠幫助模型在處理序列數據時,對不同位置的信息進行適當的加權,從而更好地捕捉序列中的關鍵信息。在時序預測任務中,注意力機制可以用于對序列中不同時間步之間的相關性進行建模。
霜冰優化算法是2023年發表于SCI、中科院二區Top期刊《Neurocomputing》上的新優化算法,現如今還未有相關的優化算法應用文獻。RIME主要對霜冰的形成過程進行模擬,將其巧妙地應用于算法搜索領域。
2.運行環境為Matlab2023a及以上,提供損失、RMSE迭代變化極坐標圖;網絡的特征可視化圖;測試對比圖;適應度曲線(若首輪精度最高,則適應度曲線為水平直線);
3.excel數據集(負荷數據集),輸入多個特征,輸出單個變量,考慮歷史特征的影響,多變量多步時間序列預測(多步預測即預測下一天96個時間點),main.m為主程序,運行即可,所有文件放在一個文件夾;
4.命令窗口輸出SSE、RMSE、MSE、MAE、MAPE、R2、r多指標評價,適用領域:負荷預測、風速預測、光伏功率預測、發電功率預測、碳價預測等多種應用。
程序設計
- 完整源碼和數據獲取方式:私信博主回復Matlab實現RIME-CNN-LSTM-Multihead-Attention多變量多步時序預測。
%% 清除內存、清除屏幕
clc
clear
%% 導入數據
data = xlsread('負荷數據.xlsx');
rng(0)
%% 數據分析
daynum=30; %% 數據量較大,選取daynum天的數據
step=96; %% 多步預測
data =data(end-step*daynum+1:end,:);
W_data = data(:,end)'; %% 實際值輸出:每天24小時,每小時4個采樣點
%% 數據歸一化
[features, ~] = mapminmax(Features, 0, 1);
[w_data, ps_output] = mapminmax(W_data, 0, 1);
%% 數據平鋪為4-D
LP_Features = double(reshape(features,fnum,step,1,daynum)); %% 特征數據格式
LP_WindData = double(reshape(w_data,step,1,1,daynum)); %% 實際數據格式%% 格式轉換為cell
NumDays = daynum; %% 數據總天數為daynum天
for i=1:NumDaysFeaturesData{1,i} = LP_Features(:,:,1,i);
endfor i=1:NumDaysRealData{1,i} = LP_WindData(:,:,1,i);
end%% 劃分數據
XTrain = FeaturesData(:,1:daynum-2); %% 訓練集輸入為 1-(daynum-2)天的特征
YTrain = RealData(:,2:daynum-1); %% 訓練集輸出為 2-(daynum-1)天的實際值 Best_rime = zeros(1, dim);Best_rime_rate = inf; % 用于最大化問題,請將此值改為 -inffor i = 1:dimRimepop(:, i) = lb(i) + rand(SearchAgents_no, 1) .* (ub(i) - lb(i)); % 初始種群endLb = lb .* ones(1, dim); % 下邊界Ub = ub .* ones(1, dim); % 上邊界it = 1; % 迭代次數Convergence_curve = zeros(1, Max_iter);Rime_rates = zeros(1, SearchAgents_no); % 初始化適應度值newRime_rates = zeros(1, SearchAgents_no);W = 5; % 軟霜冰參數,在論文第4.3.1節中有詳細討論% 計算初始位置的適應度值for i = 1:SearchAgents_no[Rime_rates(1, i),Value{i},Net{i},Info{i}] = fobj(Rimepop(i, :)); % 計算每個搜索體的適應度值% 進行貪婪選擇if Rime_rates(1, i) < Best_rime_rateBest_rime_rate = Rime_rates(1, i);Best_rime = Rimepop(i, :);bestPred = Value{i};bestNet = Net{i};bestInfo = Info{i};endend% 主循環while it <= Max_iterRimeFactor = (rand - 0.5) * 2 * cos((pi * it / (Max_iter / 10))) * (1 - round(it * W / Max_iter) / W); % 公式(3),(4),(5)的參數E = (it / Max_iter)^0.5; % 公式(6)newRimepop = Rimepop; % 記錄新的種群normalized_rime_rates = normr(Rime_rates); % 公式(7)的參數for i = 1:SearchAgents_nofor j = 1:dim% 軟霜冰搜索策略r1 = rand();if r1 < EnewRimepop(i, j) = Best_rime(1, j) + RimeFactor * ((Ub(j) - Lb(j)) * rand + Lb(j)); % 公式(3)end% 硬霜冰穿刺機制r2 = rand();if r2 < normalized_rime_rates(i)newRimepop(i, j) = Best_rime(1, j); % 公式(7)endendend
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/128577926?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128573597?spm=1001.2014.3001.5501