📄 quademo.m
字号:
function result = quademo(action,hfigure,varargin)% QUADEMO demo on non-linear (quadratic) data mapping.%% QUADEMO demonstrates use of the linear algorithms % which find quadratic decision function using non-linear% data mapping. The original space (2D in this case) % is mapped to the new one where the quadratic function% appears as the hyperplane. Following algorithms for% linear dicision rule synthesis can be used:%% 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 QTRANSF, L2Q2D, QUAD2D, PQUAD2D, % 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) 19.11.1999, 23.12.1999, 27.02.2000
% Modifications
% 26-June-2001, V.Franc, comments repared.% 24. 6.00 V. Hlavac, comments polished.
% 16-dec-2000, new comments, used linsvm function instead of svmLINE_WIDTH=1; % width of separation line
ANIM_STEPS=10; % number of steps during line animation
BORDER=.4; % minimal space between axis and every point in
DATA_IDENT='Finite sets, Enumeration'; % file identifier
% if number of arguments is less then 1, that means first call of this function. Every
% other calls set up at least argument action
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.1;
width=0.8;
bottom=0.1;
height=0.8;
hfigure=figure('Name','Quadratic discriminant function', ...
'Visible','off',...
'NumberTitle','off', ...
'tag','Quademo',...
'Units','normalized', ...
'Position',[left bottom width height],...
'Units','normalized', ...
'RendererMode','manual');
% == Axes ===============================================================
left=0.1;
width=0.65;
bottom=0.35;
height=0.60;
haxes1=axes(...
'Units','normalized', ...
'Box','on', ...
'DrawMode','fast',...
'NextPlot','add',...
'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','quademo(''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','quademo(''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','quademo(''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','quademo(''reset'',gcf)');
% Create data
bottom=bottom+1.5*height;
hbtcreat = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Create data', ...
'Callback','quademo(''creatdata'',gcf)');
% Load data
bottom=bottom+1*height;
hbtload = uicontrol(...
'Units','Normalized', ...
'ListboxTop',0, ...
'Position',[left bottom width height], ...
'String','Load data', ...
'Callback','quademo(''getfile'',gcf)');
% == Popup menus ==========================================================
% Pop up menu for the selection among 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','quademo(''epshandler'',gcf)',... 'Position',[left bottom width height], ... 'String',['Perceptron';'Kozinec ';'e-Kozinec ';'LinearSVM ']);
% == 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','quademo(''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','quademo(''iterhandler'',gcf)',...
'String','1');
% == Check boxes ===============================================================
% Make chack box to determine if a line will be drawn in one step or fluently.
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('handler1',-1,'handler2',-1,'alpha',0,'fi',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
quademo('reset',gcf);
% 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 get(h.pualgo,'Value')==3,
% algorithm e-Kozinec is selected
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,'quademo','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);
quademo('loadsets',hfigure);
quademo('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');
% change path to directory
%% wres=what('quadrat');
%% cd(wres.path);
[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);
quademo('loadsets',hfigure);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -