📄 mmdemo.m
字号:
function []=mmdemo(action,hfigure,varargin)
% MMDEMO demo on the Minimax learning algorithm.
%
% MMDEMO demonstrates the Minimax learning algorithm on
% a simple examples in 2-dimensional feature space.
%
% Minimax learning algorithm for Gaussian model estimates
% a covarinace matrix and a mean value of the Gaussian from
% given traning set. The training set is supposed to contain
% patterns well describing the problem (having high value
% of p.d.f). The patterns need not to be randomly and
% independently selected.
%
% Informaly speeking, this algorihm search for an ellipsoid
% containing the point set and having minimal diameter
% (see help mmln for more details).
%
% The found model is described by an ellipsoid (shape of
% covariance) and a crose (mean value vector). The upper (blue)
% and lower (red) bound of the optimal solution is displayed
% as well.
%
% Controling:
% Epsilon - stop condition of the algorithm - a difference between
% upper and lower bound of the optimal solution.
% Iterations - number of iterations in one step.
%
% FIG2EPS - export screen to the PostScript file.
% Load data - load input point sets from file.
% Create data - invoke program for creating point sets.
% Reset - set the tested algorithm to the initial state.
% Play - run the tested algorithm.
% Stop - stop the running algorithm.
% Step - perform only one step.
% Info - invoke the info box.
% Close - close the program.
%
% See also MMLN.
%
% Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac
% (c) Czech Technical University Prague, http://cmp.felk.cvut.cz
% Written Vojtech Franc (diploma thesis) 10.12.1999, 27.02.2000, 5.4.2000
% Modifications
% 11-june-2001, V.Franc, comments added.
% 24. 6.00 V. Hlavac, comments polished.
% Used functions: PPOINTS, ELLIPS
BORDER=0.25; % space between window limits and the points
CENTERSIZE=10; % size of center point
LINE_WIDTH=1;
AXIST_ADD=10;
DATA_IDENT='Finite sets, Enumeration'; % file identifier
if nargin < 1,
action = 'initialize';
end
% what action is required ?
switch lower(action)
case 'initialize'
% == Initialize user interface control and figure window ================
% == Figure =============================================================
left=0.2;
width=0.6;
bottom=0.1;
height=0.8;
hfigure=figure('Name','Minimax learning', ...
'Visible','off',...
'NumberTitle','off', ...
'Units','normalized', ...
'Position',[left bottom width height],...
'tag','Mmdemo',...
'doublebuffer','on',...
'backingstore','off');
% == Axes ===============================================================
% axes with prob.
left=0.1;
width=0.65;
bottom=0.1;
height=0.28;
haprob=axes(...
'Units','normalized', ...
'NextPlot','add',...
'Position',[left bottom width height]);
title('blue - log p(x), red - \Sigma \alpha(x) log p(x)',...
'Parent',haprob,...
'VerticalAlignment','bottom',...
'Units','normalized',...
'HorizontalAlignment','left',...
'Position',[0 1 0]);
htxsteps=xlabel('step number');
% points
height=0.45;
bottom=0.5;
% 'XTick',[],'YTick',[], ...
haset=axes(...
'Units','normalized', ...
'NextPlot','add',...
'Position',[left bottom width height]);
ylabel('feature y');
xlabel('feature x');
% == Buttons ===========================================================
% -- Export to EPS ---------
width=0.1;
left=0.75-width;
bottom=0.95;
height=0.04;
hbtclose = uicontrol(...
'Units','Normalized', ...
'Callback','fig2eps(gcf)',...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','FIG2EPS');
%----------------------------------
% Close button
left=0.8;
bottom=0.05;
height=0.05;
width=0.15;
hbtclose = uicontrol(...
'Units','Normalized', ...
'Callback','close(gcf)',...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Close');
% Info button: call stanard info box
bottom=bottom+1.5*height;
hbtinfo = uicontrol(...
'Units','Normalized', ...
'Callback','mmdemo(''info'',gcf)',...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Info');
% Step button: perform one adaptation step
bottom=bottom+1.5*height;
hbtstep = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Step', ...
'Interruptible','off',...
'Callback','mmdemo(''step'',gcf)');
% Stop button: stop process of adaptation
bottom=bottom+height;
hbtstop = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Stop', ...
'Callback','set(gcbo,''UserData'',1)',...
'Enable','off');
% Play button: start up adaptation
bottom=bottom+height;
hbtplay = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Play', ...
'Callback','mmdemo(''play'',gcf)');
% Reset button: set up t = 0
bottom=bottom+height;
hbtreset = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Reset', ...
'Callback','mmdemo(''reset'',gcf)');
% Create data
bottom=bottom+1.5*height;
hbtcreat = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Create data', ...
'Callback','mmdemo(''creatdata'',gcf)');
% Load data
bottom=bottom+1*height;
hbtload = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Load data', ...
'Callback','mmdemo(''getfile'',gcf)');
% == Edit line ==========================================================
% epsilon
bottom=0.95-height;
htxeps=uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',[left bottom width 0.9*height], ...
'String','epsilon');
bottom=bottom-height;
hedeps = uicontrol(...
'Units','normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'Style','edit',...
'String','0.1');
% Iterations
bottom=bottom-1.5*height;
htxiter=uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',[left bottom width 0.9*height], ...
'String','Iterations');
bottom=bottom-height;
hediter = uicontrol(...
'Units','normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'Style','edit',...
'String','1');
% == Texts ===========================================================
htitle1=title('No data loaded',...
'Parent',haset,...
'VerticalAlignment','bottom',...
'HorizontalAlignment','left',...
'Units','normalized',...
'Position',[0 1 0]);
%=====================================================================
% Store handlers
handlers=struct(...
'ellipse',struct('handler',-1,'center',-1,'mi',[],'sigma',[],'t',0,'N',[]),...
'plot1',struct('handler',-1,'topps',[],'axist',0,'time',[]),...
'plot2',struct('handler',-1,'minps',[]),...
'title1',htitle1,...
'btstep',hbtstep,...
'btstop',hbtstop,...
'btclose',hbtclose,...
'btplay',hbtplay,...
'btreset',hbtreset,...
'btinfo',hbtinfo,...
'btload',hbtload,...
'btcreat',hbtcreat,...
'txsteps',htxsteps,...
'txeps',htxeps,...
'txiter',htxiter,...
'aset',haset,...
'aprob',haprob,...
'editer',hediter,...
'edeps',hedeps);
set(hfigure,'UserData',handlers)
% Reset
mmdemo('reset',hfigure);
% Put figure on desktop
set(hfigure,'Visible','on');
drawnow;
case 'play'
% == One step learning ==============================================
h=get(hfigure,'UserData');
% get data set
sets=get(h.aset,'UserData');
% are data sets loaded ?
if isempty(sets)==1,
return;
end
% disable button
set([h.editer,h.edeps,h.btstep,h.btclose,h.btplay,...
h.btreset,h.btinfo,h.btload,h.btcreat,h.txeps,h.txiter],...
'Enable','off');
% enable stop button
set(h.btstop,'Enable','on');
% get # of iter and epsilon
iter=str2num(get(h.editer,'String'));
epsilon=str2num(get(h.edeps,'String'));
% set stop button
set(h.btstop,'UserData',0);
% start point for plot
if h.ellipse.t==0 & iter > 1,
[mi,sigma,solution,minp,topp]=mmln(sets.X,epsilon,1,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -