⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lssvmbayforward.m

📁 The goal of SPID is to provide the user with tools capable to simulate, preprocess, process and clas
💻 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 + -