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

📄 mineps.m

📁 这里实现了基于四种SVM工具箱的分类与回归算法: 1、工具箱:LS_SVMlab Classification_LS_SVMlab.m - 多类分类 Regression_LS_SVMlab
💻 M
字号:
function [alpha]=mineps(MI,SG,alpha,dalpha,tmax,tdelta)
% MINEPS finds optimal alpha (Generalized Anderson's task).% [alpha]=mineps(MI,SG,alpha,dalpha,tmax,tdelta)
%
% MINEPS is an auxiliary function used in algorithms GANDERS
%  and GANDERS2. For more details refer to book SH10.
%
%  This function maximizes unimodal objective function which
%  acts in algorithm solving Generalized Anderson's task.
%
%  This function uses numeric optimization using Fibonacci
%  sequence.
%
% See also MINEPSVL, MINEPSRT, GANDERS, GANDERS2, book SH10.
%
% Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac
% (c) Czech Technical University Prague, http://cmp.felk.cvut.cz
% Written Vojtech Franc (diploma thesis) 11.5.2000
% Modifications
% 24. 6.00 V. Hlavac, comments polished.
% global tmaxim;LO_TH=0;% default setting
if nargin < 5,
   tmax = inf;
   delta=1e-6;
elseif nargin < 6,
   delta=0;
end

% get dimension N and the # of distributions
K = size(MI,2);
N = size(MI,1);

% compute constants
for j = 1:K,
   s(j)= alpha'*MI(:,j);
   ss(j) = dalpha'*MI(:,j);
   ds(j) = ss(j) - s(j);
   sga(j) = alpha'*SG(:,(j-1)*N+1:j*N)*alpha;
   sgd(j) = dalpha'*SG(:,(j-1)*N+1:j*N)*dalpha;
   sgad(j) = dalpha'*SG(:,(j-1)*N+1:j*N)*alpha;
end


% first step
F1=1;
F2=1;
tbeg=0;
tend=1;
tmid=0.5*(tend+tbeg);
fmid=max([LO_TH,min( (s+tmid*ds)./sqrt( (1-tmid)^2*sga + 2*tmid*(1-tmid)*sgad + tmid^2*sgd ) )]);fbeg=max([LO_TH,min( (s+tbeg*ds)./sqrt( (1-tbeg)^2*sga + 2*tbeg*(1-tbeg)*sgad + tbeg^2*sgd ) )]);if sqrt( (1-tend)^2*sga + 2*tend*(1-tend)*sgad + tend^2*sgd ) == 0, fend=0;else fend=max([LO_TH,min( (s+tend*ds)./sqrt( (1-tend)^2*sga + 2*tend*(1-tend)*sgad + tend^2*sgd ) )]);end

% start up
stop=0;
while stop==0 & tmax > 0,
   tmax=tmax-1;

   % store fmid
   oldfmid=fmid;

   % Fibonacci, F(k)=F(k-1)+F(k-2)
   F=F2+F1;

   % find larger interval
   if (tmid-tbeg) < (tend-tmid),
      % new bound
      t=tmid+F1*(tend-tmid)/F;

      fvalue=max([LO_TH,min( (s+t*ds)./sqrt( (1-t)^2*sga + 2*t*(1-t)*sgad + t^2*sgd ) )]);
      if fvalue < fmid,
         tend=t;
         fend=fvalue;
      else
         tbeg=tmid;
         fbeg=fmid;
         tmid=t;
         fmid=fvalue;
      end
   else
      % new bound
      t=tbeg+F1*(tmid-tbeg)/F;

      fvalue=max([LO_TH,min( (s+t*ds)./sqrt( (1-t)^2*sga + 2*t*(1-t)*sgad + t^2*sgd ) )]);
      if fvalue < fmid,
         tbeg=t;
         fbeg=fvalue;
      else
         tend=tmid;
         fend=fmid;
         tmid=t;
         fmid=fvalue;
      end
   end

   % update Fibonacci F(k-2)=F(k-1) and F(k-1)=F(k);
   F2=F1;
   F1=F;

   % stop condition
   if tend-tbeg < tdelta,
      stop=1;
   end

end

% get the bigest value
fvalues=[fbeg fmid fend];
tvalues=[tbeg tmid tend];

[fmax, imax]=max(fvalues);
tmaxim=tvalues(imax);

% compute new alpha
alpha=alpha*(1-tmaxim)+dalpha*tmaxim;

return
;
% debugging
if 1==1,
   vals=[];      for t=0:0.01:1,
         fvalue=min( (s+t*ds)./sqrt( (1-t)^2*sga + 2*t*(1-t)*sgad + t^2*sgd ) );
      vals=[vals,fvalue];   end

   figure;   hold on;   plot(0:0.01:1,vals,'g');
   win=axis;
   line([tmid tmid],[ win(3) win(4)],'Color','k');
   line([0 1],[vals(1) vals(1)],'Color','r');   drawnow;
end
pause;return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -