⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lindemo.m

📁 四种支持向量机用于函数拟合与模式识别的Matlab示例程序
💻 M
📖 第 1 页 / 共 2 页
字号:
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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -