📄 unsudemo.m
字号:
function []=unsudemo(action,hfigure,varargin)% UNSUDEMO demo on unsupervised (EM) learning algorithm.%% UNSUDEMO demonstrates the unsupervised (Expectation-Maximization) % learning algorithm on simple examples in 2D space.%% The aim is to estimate a statistical model described as the% weighted mixture of Gaussians from unlabeled data % (point set/patterns). The input data is supposed to be% identicaly and independently seleted.%% The found model is described by ellipsoids (shape of % covariances) and a croses (mean value vectors). The value% of the optimized log-likelihood function for given model % is displayed as well.%% Control:% Features - select the model with Independent (diagonal covariance % matrix) or Dependent (full cov. matrix) features.% % of classes - prescribe the number of classes (components of the % mixture of Gaussians).% % Iterations - number of iterations in one step.% Random init - the initial model is randomly generated and/or it is % determined by the first n-patterns (mean values)% and sample covarinace matrix (covarinaces matrices).%% FIG2EPS - export screen to the PostScript file.% Save model - save current model to 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 UNSUNI, UNSUND.%% Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac% (c) Czech Technical University Prague, http://cmp.felk.cvut.cz% Written Vojtech Franc (diploma thesis) 10.11.1999% Modifications% 11-june-2001, V.Franc, comments added.% 27.02.00 V. Franc% 5. 4.00 V. Franc% 23.06.00 V. Hlavac Comments polished. Message when no data loaded.% Export of the solution to global variables.% 27-mar-2001, V.Franc, Graph og log-likelihood function added% Used functions: PPOINTS, PNMIX% == Global variables, used to export results from UNSUDEMO ========global UNSU_MI % K vectors with mean valuesglobal UNSU_SIGMA % K covariance matricesglobal UNSU_PK % K apriori probabilities for each distributions.%global UNSU_eI % Used only by the next iteration, not globalisedglobal UNSU_solution % 1 if alg. finished in stationary point, 0 otherwiseglobal UNSU_t % Number of iterations the algorithm performed% == Constants =====================================================AXIST_ADD=10;AXISY_ADD=5;BORDER=0.25; % space betwean window outer and the points
CENTERSIZE=10; % size of center point
LINE_WIDTH=1;
AXIST_ADD=10;
DATA_IDENT='Finite sets, enumeration'; % file identifier
randinit=1;
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','Unsupervised learning', ... 'Visible','off',... 'NumberTitle','off', ... 'Units','normalized', ... 'Position',[left bottom width height],... 'tag','Unsudemo',... 'doublebuffer','on',... 'backingstore','off'); % == Axes =============================================================== left=0.1; width=0.65; bottom=0.45; height=0.5; haxes1=axes(... 'Units','normalized', ... 'NextPlot','add',... 'UserData',[],... 'Position',[left bottom width height]); xlabel('feature x'); ylabel('feature y'); htitle1=title('No data loaded',...
'VerticalAlignment','bottom',...
'Parent',haxes1,... 'HorizontalAlignment','left',...
'Units','normalized',...
'Position',[0 1 0]);
% axes log-Likelihood graph left=0.1; width=0.65; bottom=0.1; height=0.25; haxes2=axes(... 'Units','normalized', ... 'NextPlot','add',... 'Position',[left bottom width height]); ylabel('logL(t)'); htitle2=title('Log-likelihood function',... 'Parent',haxes2,... 'VerticalAlignment','bottom',... 'Units','normalized',... 'HorizontalAlignment','left',... 'Position',[0 1 0]); htxsteps=xlabel('step number t=0'); % == Comment Window frame ==============================================
%% bottom=0.05;
%% height=0.16;
%% uicontrol( ...
%% 'Style','frame', ...
%% 'Units','normalized', ...
%% 'Position',[left bottom width height], ...
%% 'BackgroundColor',[0.5 0.5 0.5]);
% Text label
% uicontrol( ...
% 'Style','text', ...
% 'Units','normalized', ...
% 'Position',[left height-0.01 width 0.05], ...
% 'BackgroundColor',[0.5 0.5 0.5], ...
% 'ForegroundColor',[1 1 1], ...
% 'String','Comment Window');
% Edit window
%% border=0.01;
%% hconsole=uicontrol( ...
%% 'Style','edit', ...
%% 'HorizontalAlignment','left', ...
%% 'Units','normalized', ...
%% 'Max',10, ...
%% 'BackgroundColor',[1 1 1], ...
%% 'Position',[left+border bottom width-2*border height-0.05], ...
%% 'Enable','inactive',...
%% 'String','');
% == 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.044;
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','unsudemo(''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','unsudemo(''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: begin adaptation
bottom=bottom+height;
hbtplay = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Play', ...
'Callback','unsudemo(''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','unsudemo(''reset'',gcf)');
% Create data
bottom=bottom+1.5*height;
hbtcreat = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Create data', ...
'Callback','unsudemo(''creatdata'',gcf)');
% Load data
bottom=bottom+1*height;
hbtload = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Load data', ...
'Callback','unsudemo(''getfile'',gcf)');
% Save model bottom=bottom+1.5*height;
hbtSaveModel = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Save model', ...
'Callback','unsudemo(''savemodel'',gcf)');
% Load model% bottom=bottom+1*height;
% hbtLoadModel = uicontrol(...
% 'Units','Normalized', ...
% 'ListboxTop',0, ...
% 'Position',[left bottom width height], ...
% 'String','Load model', ...
% 'Callback','unsudemo(''loadmodel'',gcf)');
% == PopUp Menu =====================================================
bottom=0.95-height;
htxfeatures=uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',[left bottom width height], ...
'String','Features');
% popup menu
bottom=bottom-height;
hpufeatures=uicontrol( ...
'Style','popup', ...
'Units','normalized', ...
'Position',[left bottom width height], ...
'String',['Independent ';'Dependent ']);
% == Edit line ==========================================================
% prior info about number of the classes
bottom=bottom-1.3*height;
htxclasses=uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',[left bottom width 0.9*height], ...
'String','# of classes');
bottom=bottom-height;
hedclasses = uicontrol(...
'Units','normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'Style','edit',...
'String','2');
% Iterations
bottom=bottom-1.3*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');
% == CheckBox =========================================================
% Should the first algorithm step be random or not ?
bottom=bottom-height*1.3;
hxbrandom = uicontrol(...
'Style','checkbox', ...
'Units','normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Random init');
%=====================================================================
% Store handlers handlers=struct(... 'ellipse',struct('handler',-1,'mi',[],'sigma',[],'t',0,'Pk',[],... 'solution',0),... 'center',[],... 'graph1',struct('handler',-1,'loglik',[],'axist',0,'time',[]),... 'title1',htitle1,... 'title2',htitle2,... 'btSaveModel',hbtSaveModel,...% 'btLoadModel',hbtLoadModel,... 'btstep',hbtstep,... 'btstop',hbtstop,... 'btclose',hbtclose,... 'btplay',hbtplay,... 'btreset',hbtreset,... 'btinfo',hbtinfo,... 'btload',hbtload,... 'btcreat',hbtcreat,... %%% 'console',hconsole,... 'txsteps',htxsteps,... 'txclasses',htxclasses,... 'txiter',htxiter,... 'txfeatures',htxfeatures,... 'pufeatures',hpufeatures,... 'editer',hediter,... 'xbrandom',hxbrandom,... 'axes1',haxes1,... 'axes2',haxes2,... 'edclasses',hedclasses); set(hfigure,'UserData',handlers) % Reset unsudemo('reset',hfigure); % Put figure on desktop set(hfigure,'Visible','on'); drawnow; case 'savemodel' % == Save model ============================================ h=get(hfigure,'UserData'); if h.ellipse.t == 0, errordlg('No model has found yet.','No model to save','modal'); return; end [name,path]=uiputfile('*.mat','Save model'); if name ~= 0, MI=h.ellipse.mi; % mean values SIGMA=h.ellipse.sigma; % covariance matrices Pk=h.ellipse.Pk; % a-priory probabilities solution=h.ellipse.solution; steps=h.ellipse.t; % number of performed steps I=[1:size(MI,2)]; N=size(MI,1); id=dataid(2); K=ones(1,size(MI,2)); save(strcat(path,name),'id','K','N','I',... 'steps','solution','Pk','SIGMA','MI'); end case 'loadmodel' % == Load model ============================================ h=get(hfigure,'UserData');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -