?? lindemo.m
字號:
function result = lindemo(action,hfigure,varargin)% LINDEMO demo on the linear learning algorithms.%% LINDEMO demonstrates use of the algorithms which find % linear decision hyperplane between two (dichotomy)% point sets. Input data must be 2-dimensional and% can be interactively created by the user.%% The program vizualizes found hyperplane in the current % algorithm step. Badly clasiffied point, which will be used % by the algorithm for updating of the solution, is also% vizualized. Text description of the state of the tested % algorithm is printed in the comment window.%% Following algorithms can be tested:%% Perceptron - Perceptron learning rule.% Kozinec - Kozinec's algorithm.% e-Kozinec - Modified Kozinec's algorithm finding e-optimal solution.% LinearSVM - linear version of the Supprot Vector Machines.%% Control:% Algorithm - select algorithm for testing.% Epsilon - input parameter for the EKOZINEC algorithm % (see help ekozinec).% Iterations - number of iterations in one step.% Animation - enable/dissable animation.%% 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 PERCEPTR, KOZINEC, EKOZINEC, LINSVM.%% Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac% (c) Czech Technical University Prague, http://cmp.felk.cvut.cz% Written Vojtech Franc (diploma thesis) 26.02.2000, 15.5.2000% Modifications% 24. 6.00 V. Hlavac, comments polished.% 11-dec-2000 V. Franc, a little increasing of code readibility% 15-dec-2000LINE_WIDTH=1; % width of separation lineANIM_STEPS=10; % number of steps during the line animationBORDER=0.2; % minimal space between axis and pointsDATA_IDENT='Finite sets, Enumeration'; % file identifierALGOS=['Perceptron';'Kozinec ';'e-Kozinec '; 'LinearSVM '];% ;'p-sum ';'p-sumv ';'Navara ';'Nav-homog ';...% 'linprog ']; % list of algos% if number of arguments is less then 1, that means first call of this% function. Every other calls set up at least argument actionif nargin < 1, action = 'initialize';end% what action is required ?switch lower(action)case 'initialize' % == Initialize user interface control and figure ======= % == Figure ============================================= left=0.1; width=0.8; bottom=0.1; height=0.8;
hfigure=figure('Name','Linear discriminant function', ... 'Visible','off',...
'NumberTitle','off', ...
'Units','normalized', ...
'Position',[left bottom width height],...
'Units','normalized', ...
'tag','Lindemo',...
'RendererMode','manual');
% == Axes ========================================= left=0.1;
width=0.65;
bottom=0.35;
height=0.60;
haxes1=axes(...
'Units','normalized', ...
'Box','on', ...
'DrawMode','fast',...
'UserData',[],...
'Position',[left bottom width height]);
xlabel('feature x');
ylabel('feature y');
% == Comment window ================================= % Comment Window frame
bottom=0.05;
height=0.2;
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.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','lindemo(''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', ...
'Callback','lindemo(''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','lindemo(''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','lindemo(''reset'',gcf)');
% Creat data
bottom=bottom+1.5*height;
hbtcreat = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Create data', ...
'Callback','lindemo(''creatdata'',gcf)');
% Load data
bottom=bottom+1*height;
hbtload = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Load data', ...
'Callback','lindemo(''getfile'',gcf)');
% == Popup menus ====================================== % Pop up menu for the selection between algorithms
% title
bottom=0.95-height;
htxalgo=uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',[left bottom width height], ...
'String','Algorithm');
% popup menu
bottom=bottom-height;
hpualgo=uicontrol( ...
'Style','popup', ...
'Units','normalized', ...
'CallBack','lindemo(''epshandler'',gcf)',...
'Position',[left bottom width height], ...
'String',ALGOS);
% == Edit line ======================================== % epsilon
bottom=bottom-1.2*height;
htxeps=uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',[left bottom width 0.9*height], ...
'Enable','off',...
'String','epsilon');
bottom=bottom-height;
hedeps = uicontrol(...
'Units','normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'Style','edit',...
'Enable','off',...
'CallBack','lindemo(''epshandler'',gcf)',...
'String','1e-3');
% # of iterations
bottom=bottom-1.1*height;
htxiter=uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',[left bottom width 0.9*height], ...
'String','Iterations');
bottom=bottom-0.9*height;
hediter = uicontrol(...
'Units','normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'Style','edit',...
'CallBack','lindemo(''iterhandler'',gcf)',...
'String','1');
% == Check boxes ============================================== % Make check box to determine if a line will be drawn in one % step or smooth plot.
bottom=bottom-height*1.2;
hxbanim = uicontrol(...
'Style','checkbox', ...
'Units','normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Animation');
% ============================================================ % Store handlers
handlers=struct(...
'line',struct('handler',-1,'alpha',0,'theta',0,'t',0),... 'btstep',hbtstep,... 'btstop',hbtstop,... 'btclose',hbtclose,... 'btplay',hbtplay,... 'btreset',hbtreset,... 'btinfo',hbtinfo,... 'btload',hbtload,... 'btcreat',hbtcreat,... 'pualgo',hpualgo,... 'console',hconsole,... 'editer',hediter,... 'edeps',hedeps,... 'txeps',htxeps,... 'axes1',haxes1,... 'xbanim',hxbanim); set(hfigure,'UserData',handlers) % Reset lindemo('reset',hfigure); % Put figure on desktop set(hfigure,'Visible','on'); drawnow;case 'iterhandler'
% == Handler for edit line Iterations =============== h=get(hfigure,'UserData'); iter=round(str2num(get(h.editer,'String')));
if isempty(iter) | iter < 1, iter=1; end
set(h.editer,'String',num2str(iter));
case 'epshandler'
% == Handler for edit line Epsilon ======================= h=get(hfigure,'UserData'); % if algorithm e-Kozinec is selected then ... if get(h.pualgo,'Value')==3, set(h.edeps,'Enable','on');
set(h.txeps,'Enable','on');
epsil=str2num(get(h.edeps,'String'));
if epsil < 0,
epsil=1;
set(h.edeps,'String',num2str(epsil));
end
else
set(h.edeps,'Enable','off');
set(h.txeps,'Enable','off');
end
case 'creatdata'
% == Invoke data set creator ================================ creatset('finite',2,'lindemo','created',hfigure);
case 'created'
% == Load new created data set =============================
% get handler and make this figure active
figure(hfigure);
h=get(hfigure,'UserData');
% get file name
path=varargin{1};
name=varargin{2};
pathname=strcat(path,name);
if checkdat(pathname,DATA_IDENT,2,[0 0])==1,
file.pathname=pathname;
file.path=path;
file.name=name;
set(h.btload,'UserData',file);
lindemo('loadsets',hfigure);
lindemo('reset',hfigure);
else
errordlg('This file does not contain required data.','Bad file','modal'); end
case 'getfile'
% == Invoke standard open file dialog =================== % Opens file and checks if contains appropriate data, % if yes loads data.
h=get(hfigure,'UserData'); [name,path]=uigetfile('*.mat','Open file');
if name~=0,
file.pathname=strcat(path,name);
file.path=path;
file.name=name;
if checkdat(file.pathname,DATA_IDENT,2,[0 0])==1,
set(h.btload,'UserData',file);
lindemo('loadsets',hfigure);
lindemo('reset',hfigure);
else
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -