📄 ggradandr.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>ggradandr.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>ggradandr</span>(<span class=defun_in> distrib, options, init_model</span>)<br><span class=h1>% GGRADANDER Gradient method to solve the Generalized Anderson's task.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = ggradandr( distrib)</span><br><span class=help>% model = ggradandr( distrib, options)</span><br><span class=help>% model = ggradandr( 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 algorithm</span><br><span class=help>% using the generalized gradient optimization to solve</span><br><span class=help>% the the Generalized Anderson's task [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] Binary labeled Gaussian distributions:</span><br><span class=help>% .Mean [dim x ncomp] Mean vectors.</span><br><span class=help>% .Cov [dim x dim x ncomp] Covariance matrices.</span><br><span class=help>% .y [1 x ncomp] labels of Gaussians (1 or 2).</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 iterations (default 1e4 ).</span><br><span class=help>% .eps [1x1] Minimal change in the optimised criterion (default 0).</span><br><span class=help>%</span><br><span class=help>% init_model [struct] Initial model:</span><br><span class=help>% .W, .b, .t see below.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% model [struct] Linear classifier:</span><br><span class=help>% .W [dim x 1] Normal vector of the found hypeprlane 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>% .r [1x1] Mahalanobis distance for the cloasest Gaussian.</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>% .exitflag [1x1] 0 ... maximal number of iterations exceeded.</span><br><span class=help>% 1 ... condition abs( r - old_r) < eps fulfilled.</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 = ggradandr( 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>% ANDRORIG, EANDERS, GANDERS, ANDRERR, 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>% 17-sep-2003, VF</span><br><br><hr><span class=comment>% take input arguments</span><br><span class=comment>%-----------------------------</span><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.0; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'tmax'</span>), options.tmax=1e4; <span class=keyword>end</span><br><br><span class=comment>% get dimension and number of distributions</span><br>[dim,ncomp]=size(distrib.Mean);<br><br><span class=comment>% inicialization</span><br><span class=comment>%-----------------------------</span><br>exitflag = 0;<br>t = 0;<br><br><span class=comment>% add one constant coordinate</span><br>Mu = [distrib.Mean;ones(1,ncomp)];<br>Mu(:,find(distrib.y==2)) = -Mu(:,find(distrib.y==2));<br>C = zeros(dim+1,dim+1,ncomp);<br>C(1:dim,1:dim,:) = distrib.Cov;<br><br><span class=keyword>if</span> <span class=stack>nargin</span> == 3,<br> W = [ init_model.W; init_model.b]; <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=keyword>if</span> t==0, W = mean(Mu,2); <span class=keyword>end</span><br> <br><span class=comment>% find the minimal radius of all the ellipsoids</span><br>[minr,inx] = min_radius(W,Mu,C);<br>old_minr=minr;<br><br><span class=comment>% main cycle</span><br><span class=comment>%--------------------------</span><br><span class=keyword>while</span> exitflag==0 & t < options.tmax,<br> t = t + 1;<br> <br> <span class=comment>% compute contact point</span><br> x0=Mu(:,inx)-(minr/sqrt(W'*C(:,:,inx)*W))*C(:,:,inx)*W;<br><br> <span class=comment>% update</span><br> W = W + x0;<br><br> [minr,inx] = min_radius(W,Mu,C);<br><br> <span class=keyword>if</span> abs(minr-old_minr) < options.eps,<br> exitflag = 1;<br> <span class=keyword>end</span><br><br> old_minr = minr;<br><span class=keyword>end</span><br><br><span class=comment>% setup model</span><br>model.W = W(1:<span class=keyword>end</span>-1);<br>model.b = W(<span class=keyword>end</span>);<br>model.r = minr;<br>model.err = 1-cdf(<span class=quotes>'norm'</span>,minr,0,1);<br>model.t = t;<br>model.exitflag = exitflag;<br>model.distrib = distrib;<br>model.options = options;<br>model.classifier = <span class=quotes>'linclass'</span>;<br><br><span class=jump>return</span>;<br><br><br><span class=comment>%----------------------------------------------------------</span><br><span class=defun_kw>function</span> <span class=defun_out>[W,exitflag] </span>= <span class=defun_name>optimal_hyperplane</span>(<span class=defun_in>X</span>)<br><span class=comment>% finds the optimal hyperplane passing through the origin</span><br><br>[dim,num_data]=size(X);<br><br>H=eye(dim);<br>f=zeros(dim,1);<br>b=-ones(num_data,1);<br>A=-X';<br><br><span class=comment>% quadratic programming</span><br>options=optimset(<span class=quotes>'Display'</span>,<span class=quotes>'off'</span>,<span class=quotes>'Diagnostics'</span>,<span class=quotes>'off'</span>,<span class=quotes>'LargeScale'</span>,<span class=quotes>'off'</span>);<br>[W,fval,exitflag]=quadprog(H,f,A,b,[],[],[],[],[],options);<br><br><span class=jump>return</span>;<br><br><span class=comment>%----------------------------------------------------------</span><br><span class=defun_kw>function</span> <span class=defun_out>[minr,inx] </span>= <span class=defun_name>min_radius</span>(<span class=defun_in>W,Mu,C</span>);<br><span class=comment>% find radius of the miniaml ellipsoids</span><br><br>Radius = zeros(size(Mu,2),1);<br><span class=keyword>for</span> i = 1:size(Mu,2),<br> Radius(i) = W<span class=quotes>'*Mu(:,i)/sqrt(W'</span>*C(:,:,i)*W);<br><span class=keyword>end</span><br>[minr,inx]=min( Radius );<br><br><span class=jump>return</span>;<br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -