📄 pgmm.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>pgmm.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>varargout </span>= <span class=defun_name>pgmm</span>(<span class=defun_in> model, options </span>)
<br><span class=h1>% PGMM Vizualizes Gaussian mixture model.
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% pgmm( model );
</span><br><span class=help>% pgmm( model, options );
</span><br><span class=help>% h = pgmm( ... );
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% It vizualizes univariate (dim=1) or bivariate (dim=2) Gaussin mixture
</span><br><span class=help>% model (GMM). In the univariate case it also displays mixture components.
</span><br><span class=help>% It returns handles of used graphics objects.
</span><br><span class=help>%
</span><br><span class=help>% In the case of bivariate GMM trhere are two options of visualization:
</span><br><span class=help>% countours of p.d.f. ... options.visual = 'contour' (default)
</span><br><span class=help>% surface of p.d.f. ... options.visual = 'surf'
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% model.Mean [dim x ncomp] Mean values.
</span><br><span class=help>% model.Cov [dim x ncomp] Covariances.
</span><br><span class=help>% model.Prior [dim x ncomp] Mixture weights.
</span><br><span class=help>%
</span><br><span class=help>% options.comp [1x1] If 1 (default) then it plots also mixture components.
</span><br><span class=help>% options.visual [string] If equal to 'contour' then contour function is
</span><br><span class=help>% used if 'surf' then surf functions is used (see above).
</span><br><span class=help>% options.adj_axes [1x1] If 1 (default) then axes are set to display
</span><br><span class=help>% whole mixture otherwise unchanged.
</span><br><span class=help>% options.color [string] Color of GMM plot in univariate case (default 'b').
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% h [1 x nobjects] Handles of used graphics object.
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>%
</span><br><span class=help>% Univariate case:
</span><br><span class=help>% model1 = c2s({'Mean',[-3 0 3],'Cov',[0.5 1 0.8],'Prior',[0.4 0.3 0.3]});
</span><br><span class=help>% figure; pgmm(model1);
</span><br><span class=help>%
</span><br><span class=help>% Bivariate case:
</span><br><span class=help>% model2.Mean(:,1) = [-1;-1]; model2.Cov(:,:,1) = [1,0.5;0.5,1];
</span><br><span class=help>% model2.Mean(:,2) = [1;1]; model2.Cov(:,:,2) = [1,-0.5;-0.5,1];
</span><br><span class=help>% model2.Prior = [0.4 0.6];
</span><br><span class=help>% figure; pgmm(model2);
</span><br><span class=help>% figure; pgmm(model2,{'visual','surf'});
</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>% 2-may-2004, VF
</span><br><span class=help1>% 29-apr2004, VF
</span><br><span class=help1>% 8-mar-2004, VF
</span><br><br><hr><span class=keyword>if</span> <span class=stack>nargin</span> >= 2, options=c2s(options); <span class=keyword>else</span> options = []; <span class=keyword>end</span>
<br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'color'</span>), options.color = <span class=quotes>'b'</span>; <span class=keyword>end</span>
<br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'comp_color'</span>), options.comp_color = options.color; <span class=keyword>end</span>
<br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'comp'</span>), options.comp = 1; <span class=keyword>end</span>
<br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'adj_axes'</span>), options.adj_axes = 1; <span class=keyword>end</span>
<br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'visual'</span>), options.visual = <span class=quotes>'contour'</span>; <span class=keyword>end</span>
<br>
<br>[dim,ncomp] = size( model.Mean);
<br>a = <span class=graph>axis</span>;
<br>old_hold = ishold;
<br>hold on;
<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,ncomp);
<br><span class=keyword>end</span>
<br>
<br><span class=comment>% univariate case
</span><br><span class=keyword>if</span> dim == 1,
<br>
<br> a = <span class=graph>axis</span>;
<br> <span class=keyword>if</span> options.adj_axes == 1,
<br> min_x = min(a(1),min(model.Mean)-sqrt(max(model.Cov))*3);
<br> max_x = max(a(2),max(model.Mean)+sqrt(max(model.Cov))*3);
<br> <span class=keyword>else</span>
<br> min_x = a(1);
<br> max_x = a(2);
<br> <span class=keyword>end</span>
<br>
<br> x = linspace(min_x,max_x,200);
<br>
<br> h = <span class=graph>plot</span>(x, pdfgmm(x, model), options.color );
<br>
<br> <span class=keyword>if</span> options.comp == 1,
<br> <span class=keyword>for</span> i=1:ncomp,
<br> <span class=keyword>if</span> length(options.comp_color) < i,
<br> comp_color = options.comp_color(1);
<br> <span class=keyword>else</span>
<br> comp_color = options.comp_color(i);
<br> <span class=keyword>end</span>
<br> h(i+1) = <span class=graph>plot</span>(x, ...
<br> model.Prior(i)*pdfgauss(x, model.Mean(:,i),model.Cov(:,:,i)), ...
<br> [<span class=quotes>'--'</span> comp_color]);
<br> <span class=keyword>end</span>
<br> <span class=keyword>end</span>
<br>
<br><span class=comment>% bivariate case
</span><br><span class=keyword>elseif</span> dim ==2,
<br>
<br> a = <span class=graph>axis</span>;
<br> <span class=keyword>if</span> options.adj_axes == 1,
<br> tmp=[];
<br> <span class=keyword>for</span> i=1:ncomp,
<br> tmp(i) = max(eig(model.Cov(:,:,i)));
<br> <span class=keyword>end</span>
<br> margin = sqrt(max(tmp))*3;
<br> min_x = min(a(1),min(model.Mean(1,:))-margin);
<br> max_x = max(a(2),max(model.Mean(1,:))+margin);
<br> min_y = min(a(3),min(model.Mean(2,:))-margin);
<br> max_y = max(a(4),max(model.Mean(2,:))+margin);
<br> <span class=keyword>else</span>
<br> min_x = a(1);
<br> max_x = a(2);
<br> min_y = a(3);
<br> max_y = a(4);
<br> <span class=keyword>end</span>
<br>
<br> [Ax,Ay] = meshgrid(linspace(min_x,max_x,50), linspace(min_y,max_y,50));
<br> y = pdfgmm([Ax(:)<span class=quotes>';Ay(:)'</span>],model );
<br>
<br> <span class=keyword>switch</span> options.visual
<br> <span class=label>case</span> <span class=quotes>'contour'</span>
<br> h = contour( Ax, Ay, reshape(y,50,50));
<br> <span class=label>case</span> <span class=quotes>'surf'</span>
<br> h = surf( Ax, Ay, reshape(y,50,50));
<br> shading interp;
<br> <span class=keyword>end</span>
<br>
<br><span class=keyword>else</span>
<br> <span class=error>error</span>(<span class=quotes>'GMM must be univariate or bivariate.'</span>);
<br><span class=keyword>end</span>
<br>
<br><span class=comment>% return handles if required
</span><br><span class=keyword>if</span> <span class=stack>nargout</span> > 0, <span class=stack>varargout</span>{1} = h; <span class=keyword>end</span>
<br>
<br><span class=keyword>if</span> ~old_hold, hold off; <span class=keyword>end</span>
<br>
<br><span class=jump>return</span>;
<br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -