📄 optim_gammabaylssvmardr.asv
字号:
function [alpha, beta, numeffpar, Plikeli3, Plikeli2, sloga, slogb, Ed, Ew, exitflag] = optim_gammaBayLSSVMard(gamma_kostftie_0, sigma, Xtrain, Ytrain,kernn,dispOpt)
global sigm kern Xtr Ytr KK roK ALFA BETA EW ED vK logKK0;
kern = kernn;
Xtr = Xtrain;
Ytr = Ytrain;
sigm = sigma;
sigm2 = sigm^2;
if kern == 1
gebr_kernel = 'RBFkernel';
elseif kern == 2
gebr_kernel = 'LINkernel';
elseif kern == -1,
gebr_kernel= 'RBFaddkernel';
logKK0=[];
elseif kern == -2,
gebr_kernel= 'LINaddkernel';
logKK0=[];
end
if nargin < 6,
dispOpt=0;
end,
N = size(Xtr,1);
if isempty(logKK0),
KK=zeros(N);
for i=1:N,
for j=1:i,
KK(i,j) = eval([gebr_kernel,'(Xtr(i,:),Xtr(j,:),sigm)']);
KK(j,i) = KK(i,j);
end
end
elseif kern==1,
KK=exp(logKK0/sigm2);
else
KK=logKK0.^sigm;
end,
R = eye(N) - 1/N*ones(N,1)*ones(1,N);
[vK, roK, t] = svd(R*KK*R + 0.5*eye(size(KK, 1))); clear t
%vK=real(vK); roK=real(roK);
roK = diag(roK); roK = roK - 0.5; index0 = find(roK <0); if ~isempty(index0), roK(index0) = zeros(size(index0)); end
%opties=optimset('MaxFunEvals', 2000,'GradObj','on', 'DerivativeCheck', 'off', 'TolFun', 10*eps, 'TolX', 10*eps );
%[gam_opt, costlevel2] = fminunc('berek_baygam', gamma_kostftie_0, opties);
opties=optimset('MaxFunEvals', 2000, 'GradObj','on', 'DerivativeCheck', 'off', 'TolFun', 10*eps, 'TolX', 10*eps, 'display', 'off' );
[gam_opt, costlevel2, exitflag] = fmincon('berek_baygam', gamma_kostftie_0, [],[],[],[],1,64,[],opties);
if exitflag<=0|gam_opt>1e4|gam_opt<1e-4,
exitflag=1;
if gam_opt>1e4,
gam_opt=1e3;
elseif gam_opt<1e-4,
gam_opt=1e-2;
else
gam_opt=1;
end
[costlevel2] = berek_baygam(gam_opt);
end,
gam_opt = abs(gam_opt);
beta = BETA;
alpha = ALFA;
Ed = ED; Ew = EW;
numeffpar = sum( (gam_opt*real(roK)) ./ ( 1+gam_opt*real(roK) ) ) + 1;
sloga = sqrt(2/(numeffpar-1));
slogb = sqrt(2/(N-numeffpar));
Plikeli2 = costlevel2;
%Plikeli3 = Plikeli2*sloga*slogb;
%Plikeli3 = sqrt( 1/ [ prod( 1 + (gam_opt)*abs(real(roK)) ) * (numeffpar -1) * (N - numeffpar) ] );
sqrtB = sqrt(beta);
Plikeli3 = sqrt( 1/ [ prod( 1 + (gam_opt)*abs(real(roK)) ) * ] );
Plikeli3 = (N-1)*log(sqrtB) -1/2*(log((numeffpar -1) * (N - numeffpar)) + sum(log()));
%for kkk=1:N-1,
% Plikeli3 = Plikeli3*sqrtB;
%end
if dispOpt,
disp(['gam_opt=', num2str(gam_opt), ' ; numeffpar=', num2str(numeffpar), ' ; CostLevel2=', num2str(0.5*Plikeli2)]),
disp(' '),
end,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -