📄 eanders.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>eanders.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>eanders</span>(<span class=defun_in>distrib, options, init_model</span>)<br><span class=h1>% EANDERS Epsilon-solution of the Generalized Andersson's task.</span><br><span class=help>% </span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = eanders(distrib )</span><br><span class=help>% model = eanders(distrib, options)</span><br><span class=help>% model = eanders(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>% This function is an implementation of the Schlesinger's iterative</span><br><span class=help>% algorithm which finds the epsilon-solution of the Generalized </span><br><span class=help>% Anderson's task using the Kozinec's algorithm [SH10]. </span><br><span class=help>%</span><br><span class=help>% The goal of the GAT is find the binary linear classification</span><br><span class=help>% rule (g(x)=sgn(W'*x+b) with minimal probability of </span><br><span class=help>% misclassification. The conditional probabilities are known to </span><br><span class=help>% be Gaussians their paramaters belong to a given set of parameters. </span><br><span class=help>% The true parameters are not known. The linear rule which </span><br><span class=help>% guarantes the minimimal classification error for the worst </span><br><span class=help>% possible case (the worst configuration of Gaussains) is </span><br><span class=help>% sought for. </span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% distrib [struct] Input set of labeld (1 or 2) Gassians:</span><br><span class=help>% .Mean [dim x ncomp] Mean veactors.</span><br><span class=help>% .Cov [dim x dim x ncomp] Covariance matrices.</span><br><span class=help>% .y [1 x ncomp] Labels of Gaussian (1 or 2).</span><br><span class=help>% </span><br><span class=help>% options [struct] Determine stopping conditions:</span><br><span class=help>% .tmax [1x1] Maximal number of iterations.</span><br><span class=help>% .err [1x1] Desired classification error; must be 0<err<0.5; </span><br><span class=help>% (default 0.05).</span><br><span class=help>%</span><br><span class=help>% init_model [struct] Initial model:</span><br><span class=help>% W1, W2, t.</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 of the linear rule (hypeplane).</span><br><span class=help>% .b [1x1] Bias of the rule (shift from the origin).</span><br><span class=help>% </span><br><span class=help>% .t [1x1] Number of used iterations.</span><br><span class=help>% .exitflag [1x1] 1 ... solution with desired err was found.</span><br><span class=help>% 0 ... maximal number of iterations exceeded.</span><br><span class=help>% -1 ... solution does not exist.</span><br><span class=help>% .W1, .W2 Auxciliary vectors; W=W1-W2.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% distrib = load('mars');</span><br><span class=help>% model = eanders(distrib,struct('err',0.06'));</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>% ANDRORIG, GANDERS, 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>% 21-may-2004, VF</span><br><span class=help1>% 16-sep-2003, VF</span><br><br><hr><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>'err'</span>), options.err=0.05; <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><span class=keyword>if</span> ~isfield(options,<span class=quotes>'zero_th'</span>), options.zero_th=1e-6; <span class=keyword>end</span><br><br><span class=comment>% computes Mahalanobis distance correponding to the desired </span><br><span class=comment>% misclassification error</span><br>desired_r = -icdf(<span class=quotes>'norm'</span>,options.err,0,1);<br><br><span class=comment>% get dimension and number of distributions</span><br>[dim,ncomp]=size(distrib.Mean);<br><br>t = 0;<br><span class=keyword>if</span> <span class=stack>nargin</span> == 3, <br> t = init_model.t;<br> W1 = init_model.W1;<br> W2 = init_model.W2;<br><span class=keyword>end</span><br><br><span class=keyword>if</span> t==0,<br> t=1;<br> W1 = mean(distrib.Mean(:,find( distrib.y==1)),2);<br> W2 = mean(distrib.Mean(:,find( distrib.y==2)),2);<br><span class=keyword>end</span><br><br>exitflag=0;<br><span class=keyword>while</span> exitflag == 0 & t < options.tmax,<br> t=t+1;<br> <br> <span class=comment>% compute f(x)=W'*x + b</span><br> W=W1-W2;<br> b=0.5*(W2<span class=quotes>'*W2 - W1'</span>*W1);<br><br> exitflag = 1;<br> i=0;<br> <span class=keyword>while</span> exitflag ==1 & i < ncomp,<br> i=i+1;<br><br> mu_i = distrib.Mean(:,i);<br> C_i = distrib.Cov(:,:,i);<br><br> <span class=comment>% denominator</span><br> den = sqrt( W'*C_i*W );<br><br> <span class=keyword>if</span> den > options.zero_th,<br> <span class=keyword>if</span> distrib.y(i) == 1, <span class=comment>% 1st class</span><br> r_i = ( W'*mu_i + b )/den;<br> <span class=keyword>if</span> desired_r >= r_i, <span class=comment>% stopping condition</span><br> x0 = mu_i - ( desired_r/den )*C_i*W; <span class=comment>% overlapping point</span><br> k = min([((W1-W2)<span class=quotes>'*(W1-x0))/( (W1-x0)'</span>*(W1-x0) ), 1]);<br> W1 = W1*(1-k) + x0*k;<br> exitflag = 0;<br> <span class=keyword>end</span><br> <span class=keyword>elseif</span> distrib.y(i)==2,<br> r_i= -( W'*mu_i + b)/den;<br> <span class=keyword>if</span> desired_r >= r_i,<br> x0 = mu_i + ( desired_r/den )*C_i*W;<br> k = min([((W2-W1)<span class=quotes>'*(W2-x0))/( (W2-x0)'</span>*(W2-x0)), 1]);<br> W2 = W2*(1-k) + x0*k;<br> exitflag = 0;<br> <span class=keyword>end</span><br> <span class=keyword>end</span> <br> <span class=keyword>else</span> <span class=comment>% if den ~= 0,</span><br> <span class=comment>% solution does not exist - overlapping classes</span><br> exitflag = -1;<br> <span class=keyword>end</span><br><br> <span class=keyword>end</span> <span class=comment>% while exitflag == 1,</span><br><br><span class=keyword>end</span> <span class=comment>% while</span><br><br><span class=comment>% compute f(x)=W'*x + b</span><br>model.W=W1-W2;<br>model.b=0.5*(W2<span class=quotes>'*W2 - W1'</span>*W1);<br>model.t = t;<br>model.exitflag = exitflag;<br>model.W1 = W1;<br>model.W2 = W2;<br>model.options = options;<br><br>[model.err,model.r]=andrerr(model,distrib);<br><span class=keyword>if</span> model.err < options.err, model.exitflag = 1; <span class=keyword>end</span><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 + -