📄 bayeserr.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>bayeserr.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>[risk,eps1,eps2,inter1]</span>=<span class=defun_name>bayeserr</span>(<span class=defun_in>model</span>)
<br><span class=h1>% BAYESERR Bayesian risk for 1D Gaussians and 0/1-loss.
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% [risk,eps1,eps2,inter1] = bayeserr(model)
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% This function computes Bayesian risk of a classifier
</span><br><span class=help>% with the following assumptions:
</span><br><span class=help>% - 1/0 loss function (risk = expectation of misclassification).
</span><br><span class=help>% - Binary classification.
</span><br><span class=help>% - Class conditional probabilities are univariate Gaussians.
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% model [struct] Mixture of two univariate Gaussians.
</span><br><span class=help>% .Mean [1x2] Mean values [Mean1 Mean2].
</span><br><span class=help>% .Cov [1x2] Covariances [Cov1 Cov2].
</span><br><span class=help>% .Prior [1x2] A priory probabilities.
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% risk [1x1] Bayesian risk for an optimal classifier.
</span><br><span class=help>% eps1 [1x1] Integral of p(x|k=1) over x in L2, where
</span><br><span class=help>% L2 is the area where x is classified to the 2nd class.
</span><br><span class=help>% eps2 [1x1] Integral of p(x|k=1) over x in L1, where
</span><br><span class=help>% L1 is the area where x is classified to the 1nd class.
</span><br><span class=help>% inter1 [1x2] or [1x4] One or two intervals describing L1.
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% model = struct('Mean',[0 0],'Cov',[1 0.4],'Prior',[0.4 0.6]);
</span><br><span class=help>% figure; hold on;
</span><br><span class=help>% h = pgmm(model,struct('comp_color',['r' 'g']));
</span><br><span class=help>% legend(h,'P(x)','P(x|y=1)*P(y=1)','P(x|y=2)*P(y=2)');
</span><br><span class=help>% [risk,eps1,eps2,interval] = bayeserr(model)
</span><br><span class=help>% a = axis;
</span><br><span class=help>% plot([interval(2) interval(2)],[a(3) a(4)],'k');
</span><br><span class=help>% plot([interval(3) interval(3)],[a(3) a(4)],'k');
</span><br><span class=help>%
</span><br><span class=help>% See also </span><br><span class=help>% BAYESDF, BAYESCLS</span><br><span class=help>%</span><br><hr><br><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>% 02-may-2004, VF
</span><br><span class=help1>% 19-sep-2003, VF
</span><br><span class=help1>% 27-Oct-2001, VF
</span><br><br><hr><span class=comment>% allow input to be a cell
</span><br>model = c2s(model);
<br>
<br><span class=comment>% univariate variances can be given as a vector
</span><br><span class=keyword>if</span> size(model.Cov,1) ~= size(model.Cov,2),
<br> model.Cov = reshape(model.Cov,1,1,2);
<br><span class=keyword>end</span>
<br>
<br><span class=comment>% finds out decision function which is generaly quadratic
</span><br>quad_model=bayesdf(model);
<br>a = quad_model.A;
<br>b = quad_model.B;
<br>c = quad_model.C;
<br>
<br><span class=comment>% get parameters
</span><br>p1=model.Prior(1); p2=model.Prior(2);
<br>c1=model.Cov(:,:,1); c2=model.Cov(:,:,2);
<br>m1=model.Mean(1); m2=model.Mean(2);
<br>
<br><span class=comment>% Split X into X1 and X2 according to the computed quadratic
</span><br><span class=comment>% discriminat function ax^2 + bx + c = 0 and computes
</span><br><span class=comment>% eps1 and eps2.
</span><br>
<br><span class=keyword>if</span> a==0,
<br> <span class=comment>% The decision function is linear, i.e. in 1D it is a
</span><br> <span class=comment>% single threshold.
</span><br> th=-c/b;
<br> inter1=[th,inf];
<br>
<br> <span class=comment>% gets label for the interval (th,inf)
</span><br> class=classify(th+1,p1,p2,m1,m2,c1,c2);
<br>
<br> <span class=keyword>if</span> abs(c)==inf,
<br> risk=0;
<br> <span class=keyword>if</span> class==1,,
<br> eps1=0;
<br> eps2=1;
<br> inter1=[-inf,inf];
<br> <span class=jump>return</span>;
<br> <span class=keyword>else</span>
<br> eps1=1;
<br> eps2=0;
<br> inter1=[];
<br> <span class=keyword>end</span>
<br> <span class=keyword>end</span>
<br>
<br> eps1=1-erfc2(th,m1,sqrt(c1));
<br> eps2=erfc2(th,m2,sqrt(c2));
<br>
<br> <span class=keyword>if</span> class==2,
<br> <span class=comment>% swap eps1 and eps2
</span><br> tmp=eps2;
<br> eps2=eps1;
<br> eps1=tmp;
<br> <span class=keyword>end</span>
<br>
<br><span class=keyword>else</span>
<br> <span class=comment>% The decision function is quadratic, i.e. in 2d
</span><br> <span class=comment>% there exis two thresholds which determine three intervals.
</span><br>
<br> D=b^2-4*a*c;
<br> <span class=keyword>if</span> D > 0,
<br> th1=(-b-sqrt(D))/(2*a);
<br> th2=(-b+sqrt(D))/(2*a);
<br>
<br> <span class=keyword>if</span> th1 > th2,
<br> tmp=th1;
<br> th1=th2;
<br> th2=tmp;
<br> <span class=keyword>end</span>;
<br>
<br> <span class=comment>% finds out label for the interval [th1,th2].
</span><br> class=classify((th2+th1)/2,p1,p2,m1,m2,c1,c2);
<br>
<br> <span class=keyword>if</span> class==2
<br> <span class=comment>% integral eps2 = int_th2^inf + int_{-inf}^th1
</span><br> eps2 = 1 + erfc2(th2,m2,sqrt(c2)) - erfc2(th1,m2,sqrt(c2));
<br> <span class=comment>% integral eps1= int_th1^th2
</span><br> eps1 = erfc2(th1,m1,sqrt(c1)) - erfc2(th2,m1,sqrt(c1));
<br>
<br> inter1=[-inf,th1,th2,inf];
<br> <span class=keyword>else</span>
<br> <span class=comment>% integral eps1 = int_th2^inf + int_{-inf}^th1
</span><br> eps1 = 1 + erfc2(th2,m1,sqrt(c1)) - erfc2(th1,m1,sqrt(c1));
<br> <span class=comment>% integral eps2= int_th1^th2
</span><br> eps2=erfc2(th1,m2,sqrt(c2))-erfc2(th2,m2,sqrt(c2));
<br>
<br> inter1=[th1,th2];
<br> <span class=keyword>end</span>
<br>
<br> <span class=keyword>else</span>
<br> <span class=comment>% finds out label for the interval [-inf,inf].
</span><br> class=classify(0,p1,p2,m1,m2,c1,c2);
<br>
<br> <span class=keyword>if</span> class == 1,
<br> eps1=0;
<br> eps2=1;
<br> inter1=[-inf,inf];
<br> <span class=keyword>else</span>
<br> eps1=1;
<br> eps2=0;
<br> inter1=[];
<br> <span class=keyword>end</span>
<br> risk=0;
<br> <span class=jump>return</span>;
<br> <span class=keyword>end</span>
<br><span class=keyword>end</span>
<br>
<br><span class=comment>% computes the Bayesian risk
</span><br>risk = p1*( eps1 - eps2 ) + eps2;
<br>
<br><span class=jump>return</span>;
<br>
<br><span class=comment>%-----------------------------------------------
</span><br><span class=defun_kw>function</span> <span class=defun_out>class </span>= <span class=defun_name>classify</span>(<span class=defun_in>x,p1,p2,m1,m2,c1,c2</span>)
<br><span class=comment>% finds out to which class the given x belongs
</span><br>
<br><span class=keyword>if</span> p1==1, <span class=comment>% only the 1st class is possible
</span><br> class=1;
<br><span class=keyword>elseif</span> p2==1, <span class=comment>% only the 2nd class is possible
</span><br> class=2;
<br><span class=keyword>elseif</span> pdfn(x,m1,c1)*p1 > pdfn(x,m2,c2)*p2,
<br> class =1;
<br><span class=keyword>else</span>
<br> class=2;
<br><span class=keyword>end</span>
<br>
<br><span class=defun_kw>function</span> <span class=defun_out>p</span>=<span class=defun_name>pdfn</span>(<span class=defun_in>x,m,c</span>)
<br> p=exp(-1/2*mahalan(x,m,c))/((2*pi)^(1/2) * sqrt(det(c)));
<br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -