多維時(shí)序 | MATLAB實(shí)現(xiàn)BP、SVM、LSSVM多變量時(shí)間序列負(fù)荷預(yù)測(cè)(考慮歷史特征的影響,多指標(biāo)、多圖輸出)
預(yù)測(cè)效果
基本介紹
多維時(shí)序 | MATLAB實(shí)現(xiàn)BP、SVM、LSSVM多變量時(shí)間序列負(fù)荷預(yù)測(cè)(考慮歷史特征的影響,多指標(biāo)、多圖輸出)。
1.Matlab實(shí)現(xiàn)BP、SVM、LSSVM多變量時(shí)間序列預(yù)測(cè);
2.運(yùn)行環(huán)境為Matlab2018b;
3.輸入多個(gè)特征,輸出單個(gè)變量,考慮歷史特征的影響,多變量時(shí)間序列預(yù)測(cè);
4.data為數(shù)據(jù)集,所有文件放在一個(gè)文件夾;
5.命令窗口輸出R2、MSE、MAE、MAPE和MBE多指標(biāo)評(píng)價(jià);文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-433629.html
程序設(shè)計(jì)
- 完整程序和數(shù)據(jù)獲取方式1:私信博主;
- 完整程序和數(shù)據(jù)獲取方式2:同等價(jià)值程序兌換;
function cost = crossvalidatelssvm(model,Y, L, omega, estfct,combinefct)
% Estimate the model performance of a model with l-fold crossvalidation
%
%%%%%%%%%%%%%%%%%%%%%
% INTERNAL FUNCTION %
%%%%%%%%%%%%%%%%%%%%%
%
%if size(X,1)~=size(Y,1), error('X and Y have different number of datapoints'); end
nb_data = size(Y,1);
d = size(model.xtrain,2);
% LS-SVMlab
eval('model = initlssvm(model{:});',' ');
model.status = 'changed';
eval('L;','L=min(round(sqrt(size(model.xfull,1))),10);');
eval('estfct;','estfct=''mse'';');
eval('combinefct;','combinefct=''mean'';');
% Y is raw data, non preprocessed
py = Y;
[~,Y] = postlssvm(model,[],Y);
gams = model.gamcsa; try sig2s = model.kernel_parscsa; catch, sig2s = [];end
%initialize: no incremental memory allocation
costs = zeros(L,length(gams));
block_size = floor(nb_data/L);
% check whether there are more than one gamma or sigma
for j =1:numel(gams)
if strcmp(model.kernel_type,'RBF_kernel') || strcmp(model.kernel_type,'RBF4_kernel')
model = changelssvm(changelssvm(model,'gam',gams(j)),'kernel_pars',sig2s(j));
elseif strcmp(model.kernel_type,'lin_kernel')
model = changelssvm(model,'gam',gams(j));
elseif strcmp(model.kernel_type,'poly_kernel')
model = changelssvm(changelssvm(model,'gam',gams(j)),'kernel_pars',[sig2s(1,j);sig2s(2,j)]);
else
model = changelssvm(changelssvm(model,'gam',gams(j)),'kernel_pars',[sig2s(1,j);sig2s(2,j);sig2s(3,j)]);
end
% calculate matrix for LS-SVM once for the entire data
S = ones(nb_data,1);
Inb = eye(nb_data);
K = kernel_matrix2(omega,model.kernel_type,model.kernel_pars,d);
Atot = K+Inb./model.gam;
% Cholesky factor
try R = chol(Atot);
% Solve full system
q = R\(R'\[py S]);
p = q(:,2); q = q(:,1);
s = 1/sum(p);
bias = s*sum(q);
alpha = q - p*bias;
% Two expensive steps yet more efficient that using LINSOLVE on each fold
Ri = R\Inb;
C = Ri*Ri' - s*(p)*p';
catch %R = cholinc(sparse(Atot),1e-5);
A = [K+Inb./model.gam S; S' 0];
C = pinv(A);
alpha = C*[py;0];
%bias = alpha(nb_data+1);
alpha = alpha(1:nb_data);
end
% start loop over l validations
for l = 1:L,
% divide data in validation set and trainings data set
if l==L,
%%train = 1:block_size*(l-1); % not used
validation = block_size*(l-1)+1:nb_data;
else
%%train = [1:block_size*(l-1) block_size*l+1:nb_data]; % not used
validation = block_size*(l-1)+1:block_size*l;
end
% Submatrix of C to compute residuals for the l-th fold left out
Ckk = C(validation,validation);
% Solution of small linear system (block_size x block_size)
try % faster
Rkk = chol(Ckk+eps);
betak = Rkk\(Rkk'\alpha(validation));
catch
betak = Ckk\alpha(validation);
end
% latent outputs for validation
yh = py(validation) - betak;
[~,yh] = postlssvm(model,[],yh);
if ~(model.type(1)=='c')
costs(l,j) = feval(estfct,yh - Y(validation,:));
else
costs(l,j) = feval(estfct,Y(validation,:),sign(yh));
end
end
end
cost = feval(combinefct, costs);
學(xué)習(xí)總結(jié)
- 一些基本的思路和步驟來(lái)實(shí)現(xiàn)多變量時(shí)間序列預(yù)測(cè)。
- 數(shù)據(jù)預(yù)處理:首先需要對(duì)多變量時(shí)間序列數(shù)據(jù)進(jìn)行預(yù)處理,包括數(shù)據(jù)清洗、缺失值處理、特征工程等。對(duì)于歷史特征的影響,可以考慮加入滯后項(xiàng)或差分項(xiàng)等特征。
- 數(shù)據(jù)劃分:將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集,一般采用時(shí)間序列的劃分方式,即前一部分?jǐn)?shù)據(jù)作為訓(xùn)練集,后一部分?jǐn)?shù)據(jù)作為測(cè)試集。
- BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn):利用MATLAB中的函數(shù)實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò),通過(guò)調(diào)整網(wǎng)絡(luò)的參數(shù)和結(jié)構(gòu)來(lái)優(yōu)化訓(xùn)練效果。
- SVM實(shí)現(xiàn):利用MATLAB中函數(shù)實(shí)現(xiàn)SVM模型,通過(guò)調(diào)整SVM的超參數(shù)來(lái)優(yōu)化模型效果。
- LSSVM實(shí)現(xiàn):利用MATLAB中的“trainlssvm”函數(shù)實(shí)現(xiàn)LSSVM模型,同樣需要調(diào)整超參數(shù)來(lái)優(yōu)化模型效果。
- 模型評(píng)估:通過(guò)對(duì)測(cè)試集的預(yù)測(cè)結(jié)果進(jìn)行評(píng)估,可以使用常見(jiàn)的評(píng)估指標(biāo)如均方誤差、平均絕對(duì)誤差、均方根誤差等,來(lái)比較不同模型的預(yù)測(cè)效果。
- 以上是一個(gè)基本的多變量時(shí)間序列預(yù)測(cè)的實(shí)現(xiàn)步驟和思路,具體的實(shí)現(xiàn)細(xì)節(jié)需要根據(jù)數(shù)據(jù)和模型的具體情況進(jìn)行調(diào)整。
參考資料
[1] https://blog.csdn.net/kjm13182345320/category_11799242.html?spm=1001.2014.3001.5482
[2] https://blog.csdn.net/kjm13182345320/article/details/124571691文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-433629.html
到了這里,關(guān)于多維時(shí)序 | MATLAB實(shí)現(xiàn)BP、SVM、LSSVM多變量時(shí)間序列預(yù)測(cè)(考慮歷史特征的影響,多指標(biāo)、多圖輸出)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!