📄 androrig.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>androrig.m</title><link rel="stylesheet" type="text/css" href="../../../m-syntax.css"></head><body><code><span class=defun_kw>function</span> <span class=defun_out>model</span>=<span class=defun_name>androrig</span>(<span class=defun_in>distrib,options,init_model</span>)<br><span class=h1>% ANDRORIG Original method to solve the Anderson-Bahadur's task.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = androrig(distrib)</span><br><span class=help>% model = androrig(distrib,options)</span><br><span class=help>% model = androrig(distrib,options,init_model)</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% It solves the original Anderson task [Anderson62]. The goal is to </span><br><span class=help>% find binary linear classifier which minimizes probability of </span><br><span class=help>% misclassification. The class conditional probability distributions </span><br><span class=help>% are Gaussians. The a prior probabilities is unknown.</span><br><span class=help>%</span><br><span class=help>% model = androrig( distrib ) solves the original Anderson's task </span><br><span class=help>% for given two Gaussians distributions. The structure distrib </span><br><span class=help>% <span class=help_field>contains:</span></span><br><span class=help>% .Mean [dim x 2] Matrix containing mean vectors of the first and</span><br><span class=help>% second class distributions.</span><br><span class=help>% .Cov [dim x dim x 2]$ Matrix containing covariance matrices of the</span><br><span class=help>% first and second distribution.</span><br><span class=help>%</span><br><span class=help>% model = androrig( distrib, options ) allows to specify the maximal </span><br><span class=help>% number of iterations options.tmax and the distance to the</span><br><span class=help>% optimal solution options.eps defining the stopping condition.</span><br><span class=help>%</span><br><span class=help>% model = androrig( distrib, options, init_model ) allows to specify </span><br><span class=help>% the initial point init_model.gamma. The initial value of the</span><br><span class=help>% counter of iterations can be specified in options.t.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% distrib [struct] Two Gaussians:</span><br><span class=help>% .Mean [ dim x 2] Mean veactors.</span><br><span class=help>% .Cov [ dim x dim x 2] Covariance matrices.</span><br><span class=help>%</span><br><span class=help>% options [struct] Defines stopping condition:</span><br><span class=help>% .tmax [1x1] Maximal number of iteration.</span><br><span class=help>% .eps [1x1] Closeness to the optimal solution. If eps=0 the</span><br><span class=help>% algorithm converges to the optimal solution but it does not</span><br><span class=help>% have to stop (default 0.001).</span><br><span class=help>%</span><br><span class=help>% init_model [struct] Init model:</span><br><span class=help>% .gamma [1x1] Auxciliary variable (default 1).</span><br><span class=help>% .t [1x1] (optional) Counter of iterations.</span><br><span class=help>% </span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% model [struct] Binary linear classifier:</span><br><span class=help>% .W [dim x 1] Normal vector the found hyperplane W'*x+b=0.</span><br><span class=help>% .b [1x1] Bias of the hyperplane.</span><br><span class=help>% </span><br><span class=help>% .err [1x1] Probability of misclassification.</span><br><span class=help>% .t [1x1] Number of iterations.</span><br><span class=help>% .r1 [1x1] Mahalanobis distance of the first Gaussian to the</span><br><span class=help>% found hyperplane.</span><br><span class=help>% .r2 [1x1] Mahalanobis distance of the second Gaussian to the</span><br><span class=help>% found hyperplane. In the optimal solution r1 = r2.</span><br><span class=help>% .exitflag [1x1] 0 ... maximal number of iterations tmax exceeded.</span><br><span class=help>% 1 ... condition delta < eps satisfied.</span><br><span class=help>% .delta [1x1] Indicates distance from the optimal solution.</span><br><span class=help>% .gamma [1x1] Auxciliary variable.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% data = load('riply_trn');</span><br><span class=help>% distrib = mlcgmm(data);</span><br><span class=help>% model = androrig(distrib);</span><br><span class=help>% figure; pandr( model, distrib );</span><br><span class=help>%</span><br><span class=help>% See also </span><br><span class=help>% GANDERS, EANDERS, GGRADANDR, LINCLASS.</span><br><span class=help>%</span><br><hr><span class=help1>% <span class=help1_field>About:</span> Statistical Pattern Recognition Toolbox</span><br><span class=help1>% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac</span><br><span class=help1>% <a href="http://www.cvut.cz">Czech Technical University Prague</a></span><br><span class=help1>% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a></span><br><span class=help1>% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a></span><br><br><span class=help1>% <span class=help1_field>Modifications:</span></span><br><span class=help1>% 20-may-2004, VF</span><br><span class=help1>% 24-Feb-2003, VF</span><br><br><hr><span class=comment>% process input arguments</span><br><span class=comment>% -----------------------------</span><br><span class=keyword>if</span> <span class=stack>nargin</span> < 1,<br> <span class=error>error</span>(<span class=quotes>'Not enough input arguments.'</span>);<br><span class=keyword>end</span><br><br><span class=keyword>if</span> <span class=stack>nargin</span> < 2, options = []; <span class=keyword>else</span> options = c2s( options ); <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'eps'</span>), options.eps = 0.001; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'tmax'</span>), options.tmax = inf; <span class=keyword>end</span><br><br><span class=comment>% get paramaters of distributions</span><br><span class=keyword>if</span> isfield(distrib, <span class=quotes>'y'</span> ) & (distrib.y(1) ~= distrib.y(2)),<br> inx1 = 2; inx2 = 1;<br><span class=keyword>else</span><br> inx1 = 1; inx2 = 2;<br><span class=keyword>end</span><br>m1=distrib.Mean(:,inx1);<br>m2=distrib.Mean(:,inx2);<br>dim=length(m1);<br>C1=distrib.Cov(:,:,inx1);<br>C2=distrib.Cov(:,:,inx2);<br><br><span class=comment>% Inicialization </span><br><span class=comment>% -----------------------------------------</span><br>gamma=1;<br>delta=inf;<br>t=0;<br><br><span class=keyword>if</span> <span class=stack>nargin</span> == 3, ,<br> gamma = init_model.gamma;<br> <span class=keyword>if</span> isfield( init_model, <span class=quotes>'t'</span>), t = init_model.t; <span class=keyword>end</span><br><span class=keyword>end</span><br><br><span class=comment>% Main loop cycle</span><br><span class=comment>%---------------------------------</span><br><span class=keyword>while</span> options.tmax > t & delta > options.eps,<br> t=t+1;<br><br> lambda=1/(1+gamma);<br><br> W=inv((1-lambda)*C1+lambda*C2)*(m1-m2);<br> gamma=sqrt((W<span class=quotes>'*C2*W)/(W'</span>*C1*W));<br><br> delta=abs( gamma - (1-lambda)/lambda );<br><span class=keyword>end</span><br><br>b1 = -lambda*(W<span class=quotes>'*C2*W)-(W'</span>*m2);<br>b2 = (1-lambda)*(W<span class=quotes>'*C1*W)-(W'</span>*m1);<br>b = (b1+b2)/2;<br><br>r1 = (W<span class=quotes>'*m1 + b)/sqrt(W'</span>*C1*W);<br>r2 = -(W<span class=quotes>'*m2 + b)/sqrt(W'</span>*C2*W);<br>minr=min([r1 r2]);<br><br><span class=comment>% -- output model -----------------</span><br>model.W = W;<br>model.b=b;<br>model.err = 1-cdf(<span class=quotes>'norm'</span>,minr,0,1);<br>model.t = t;<br>model.delta = delta;<br>model.gamma = gamma;<br>model.r1=r1;<br>model.r2=r2;<br>model.r=minr;<br><br><span class=keyword>if</span> delta <= options.eps, <br> model.exitflag = 1;<br><span class=keyword>else</span><br> model.exitflag = 0;<br><span class=keyword>end</span><br><br>model.fun=<span class=quotes>'linclass'</span>;<br><br><span class=jump>return</span>;<br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -