📄 lssvmbayforward.m
字号:
function [forList, ptrnNew, ptrnRest, vpredRest, vpredAdd, nAdd]=lssvmBayForward(ptrnInit, ttrn, ptrnWait, vpredWait, L3Init, nstep)
% function [forList, ptrnNew, ptrnRest, vpredRest, vpredAdd, nAdd]=lssvmBayForward(ptrnInit, ttrn, ptrnWait, vpredWait, L3Init, nstep)
if nargin < 4,
disp('No enough Inputs'),
help lssvmBayForward,
return,
end,
if nargin < 5,
L3Init = inf;
end,
if nargin < 6,
nstep = size(ptrnWait,2);
end,
disp(['#Initial inputs : ', num2str(size(ptrnInit,2)), ' x ', num2str(length(ttrn))]),
disp(['#Waiting inputs : ', num2str(size(ptrnWait,2)), ' x ', num2str(length(ptrnWait))]),
L3star=L3Init; L3stars=[];
forList=struct('type','+','name', 'null', 'L3', L3Init, 'sigOpt', 0, 'gamOpt', 0, 'neffPar', 0);
nvWait=size(ptrnWait, 2);
idxAdd=[]; waitList=[1: nvWait]; nAdd = 0; N_inputs= size(ptrnInit, 2);
disp('------------------------------------------------'),
disp('--- Lssvm Bayesian Input Selection: forward ----'),
disp('------------------------------------------------'),
for step=1:nstep,
waitList = setdiff(waitList, idxAdd);
if isempty(waitList),
break,
end,
N_inputs=N_inputs+1;
Sigma = sqrt(N_inputs/8)*[0.5 1 1.5 2 3 4 5 6 8 10];
%Sigma = sqrt(N_inputs/8)*[1 2 3 4 5 6];
nst=length(waitList);
iAdd=0;
L3r=inf*ones(size(Sigma));
L3=[]; BPlikeli2=[];
for st=1:nst,
disp(['--------- Input ', num2str(st), ' -----------']),
Xtrain = [ptrnInit, ptrnWait(:,[idxAdd, waitList(st)])]; Ytrain = ttrn;
for i = 1:length(Sigma),
% disp(['Sigma ', num2str(i), ': ', num2str(Sigma(i))]),
if i == 1,
startgamma = 1;
else
startgamma = gamma(i-1);
end
[Bmu(st,i), Bzeta(st,i), Bnumeffpar(st,i), BPlikeli3(st,i), BPlikeli2(st,i), Bsloga(st,i), Bslogb(st,i)] ...
= optim_gammaBayLSSVMardr(startgamma, Sigma(i), Xtrain, Ytrain, 1);
L3(st,i)= 1/2*BPlikeli2(st,i)-log(Bsloga(st,i))-log(Bslogb(st,i));
gamma(st,i) = abs(Bzeta(st,i)/Bmu(st,i));
end
if min(L3(st,:)) < min(L3r),
L3r=L3(st,:); iAdd=waitList(st);
gammar=gamma(st,:);
Bmur=Bmu(st,:); Bzetar=Bzeta(st,:); Bnumeffparr=Bnumeffpar(st,:);
BPlikeli3r=BPlikeli3(st,:); BPlikeli2r=BPlikeli2(st,:);
Bslogar=Bsloga(st,:); Bslogbr=Bslogb(st,:);
end,
end,
% figure(step), hold on, plot(min(L3,[],2), 'b'), plot(0.5*min(BPlikeli2,[],2), 'r'), hold off,
% To check if to add the variable or not!
if min(L3r)<L3star,
[m, iopt] = min(L3r);
sig_opt = Sigma(iopt);
gam_opt = gammar(iopt);
neffPar = Bnumeffparr(iopt);
nAdd = nAdd + 1;
L3star=min(L3r); L3stars(step)=L3star;
va=vpredWait{iAdd};
forList(step).type ='+';
forList(step).name = va;
forList(step).L3=L3star;
forList(step).sigOpt=sig_opt;
forList(step).gamOpt=gam_opt;
forList(step).neffPar=neffPar;
idxAdd=[idxAdd, iAdd];
disp(['For ', num2str(N_inputs), ' inputs:']),
disp([' Optimal Sigma : ', num2str(sig_opt), ' ; Optimal gamma : ', num2str(gam_opt)]),
disp([' current L3 : ', num2str(L3star), ' ; #effect Param : ', num2str(neffPar)]),
disp([' ======= ', num2str(nAdd), '. variable added: ', va]),
else
break,
end,
end, % For step
disp('No more variable can be added!'),
disp('Forward selection summary: '),
for fi=1:size(forList,2),
disp([num2str(fi), '. ', forList(fi).name, ' : ', num2str(forList(fi).L3)]),
end,
ptrnNew=[ptrnInit, ptrnWait(:,idxAdd)];
idxRest=setdiff([1:nvWait], idxAdd);
ptrnRest=ptrnWait(:,idxRest);
vpredRest={};
for i=1:nvWait-nAdd,
vpredRest{i}=vpredWait{idxRest(i)};
end,
vpredAdd={};
for i=1:nAdd,
vpredAdd{i}=vpredWait{idxAdd(i)};
end,
if nAdd>1,
%figure, plot(L3stars, 'b'),
end,
return,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -