📄 demo_svm.m
字号:
case 1 % SMO set(data.tx_cconst,'Enable','on'); set(data.ed_cconst,'Enable','on'); set(data.tx_param,'Enable','on'); set(data.tx_param,'String',SMO_PARAM); set(data.ed_param,'Enable','on'); set(data.ed_param,'String',DEF_SMO_PARAM); % case 2 % Matlab toolbox% set(data.tx_cconst,'Enable','on');% set(data.ed_cconst,'Enable','on');% set(data.tx_param,'Enable','off');% set(data.ed_param,'Enable','off'); % case 3 % Kernel-SK case 2 % Kernel-SK set(data.tx_cconst,'Enable','on'); set(data.ed_cconst,'Enable','on'); set(data.tx_param,'Enable','on'); set(data.ed_param,'Enable','on'); set(data.tx_param,'String',KERNELSK_PARAM); set(data.ed_param,'String',DEF_KERNELSK_PARAM);% case 4 % Matlab toolbox% set(data.tx_cconst,'Enable','on');% set(data.ed_cconst,'Enable','on');% set(data.tx_param,'Enable','off');% set(data.ed_param,'Enable','off');% case 5 % Kernel Perceptron case 3 % Kernel Perceptron set(data.tx_cconst,'Enable','off'); set(data.ed_cconst,'Enable','off'); set(data.tx_param,'Enable','on'); set(data.ed_param,'Enable','on'); set(data.tx_param,'String',KPERCEPTR_PARAM); set(data.ed_param,'String',DEF_KPERCEPTR_PARAM); end %== Handler for C-const edit line ===========================case 'cconst_handler' data=get(hfigure,'UserData'); C = str2num(get(data.ed_cconst,'String')); if C <= 0, C = 100; end set( data.ed_cconst,'String',num2str(C)); %== Handle for arg edit line ===========================case 'arg_handler' data=get(hfigure,'UserData'); arg = str2num(get(data.ed_arg,'String')); if arg < 0, arg = 1; end set( data.ed_arg, 'String',num2str( arg)); %== Handle for kernel pop up menu ===========================case 'kernel_handler' data=get(hfigure,'UserData'); ker_inx = get( data.pu_kernel,'Value'); if ker_inx >= 2, set( data.ed_arg,'Enable','on'); set( data.tx_arg,'Enable','on'); else set( data.ed_arg,'Enable','off'); set( data.tx_arg,'Enable','off'); end%== Calls data creator ==========================================case 'creatdata' createdata('finite',2,'demo_svm','created',hfigure); % == Loads recently created data ================================case 'created' % get handler and make this figure active figure(hfigure); data = get(hfigure,'UserData'); % get file name path=varargin{1}; name=varargin{2}; pathname=strcat(path,name); if check2ddata(pathname), file.pathname=pathname; file.path=path; file.name=name; set(data.bt_load,'UserData',file); demo_svm('loadsets',hfigure); demo_svm('reset',hfigure); else errordlg('This file does not contain required data.','Bad file','modal'); end % == Calls standard open file dialog ==========================case 'getfile' data=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, if check2ddata( file.pathname ), set(data.bt_load,'UserData',file); demo_svm('loadsets',hfigure); demo_svm('reset',hfigure); else errordlg('This file does not contain required data.','Bad file','modal'); end endcase 'loadsets' % == Load data from file ========================================== data = get( hfigure,'UserData' ); % Clear axes clrchild( data.axes); % set x and y axes labels xlabel('feature x'); ylabel('feature y'); % Get file name with sets file=get( data.bt_load,'UserData'); % Load sets trn = load(file.pathname ); trn.I=trn.y; trn.N= 2; trn.K = [length( find(trn.y==1)),length(find(trn.y==2))]; % store loaded sets set( data.axes,'UserData', trn); % focus on axes axes( data.axes ); % plots points ppatterns( trn ); drawnow; % == Reset ==========================================================case 'reset' data = get(hfigure,'UserData'); % Clear axes clrchild( data.axes); % get data set trn = get( data.axes, 'UserData'); % get file file = get( data.bt_load,'UserData'); % create comment if isempty( trn ) == 0, consoletext=sprintf('Data loaded.\nSelect algorithm and press Train SVM button.\n'); titletext=sprintf('File: %s, # of points K = %d', file.name , size(trn.X,2)); set( data.axes, 'XLimMode','auto', 'YLimMode','auto'); ppatterns( trn); else consoletext=sprintf(['No data loaded.\n' ... 'Press Create data button to create your own data.\n'...
'Press Load data button to load data.\n' ...
'Load sample data from ../data/binary/']); titletext=''; pos=get( data.axes,'Position'); fsize=min(pos(3),pos(4))/10; setaxis( data.axes,[-1 1 -1 1]);% axis([-1 1 -1 1]); builtin('text',0,0,'Press ''Load data'' button.',... 'HorizontalAlignment','center',... 'FontUnits','normalized',... 'Clipping','on',... 'FontSize',fsize); end % show comment set( data.console,'String',consoletext ); % print title pos=get( data.axes,'Position'); fsize=(1-pos(2)-pos(4))*1; title(titletext,... 'Parent', data.axes,... 'VerticalAlignment','bottom',... 'HorizontalAlignment','left',... 'FontUnits','normalized',... 'Units','normalized',... 'Position',[0 1 0],... 'FontSize',fsize);% == Calls Matlab`s info box ==================================case 'info' helpwin(mfilename);endreturn;%===============================================================function [Alpha,bias] = svm_train( data, trn, ker, arg, C )if strcmpi( ker, 'linear'), strarg = '-';else strarg = num2str( arg);endparam = str2num( get( data.ed_param,'String'));switch get( data.pu_algo, 'Value' ), case 1 % Sequential Minimal Optimizer% if length(param) ~= length( str2num(DEF_SMO_PARAM)),% param = str2num(DEF_SMO_PARAM);% end % [Alpha,bias,nsv,kercnt,trn_err,margin]=...% smo(trn.X,trn.I,ker,arg,C, param(1),param(2) ); options.ker = ker; options.arg = arg; options.C = C; options.eps = param(1); options.tol = param(2); model = smo( trn, options); Alpha = zeros(1,size(trn.X,2)); Alpha(model.sv.inx) = model.Alpha(:)'; bias = model.b; nsv = model.nsv; kercnt=model.kercnt; trn_err = model.trnerr; margin = model.margin; text = sprintf(... ['SVM (L1) by Sequential Minimal Optimizer\n',... 'Kernel: %s (%s), C: %.4f\n',... 'Kernel evaluations: %d\n',... 'Number of Support Vectors: %d\n',... 'Margin: %.4f\n',... 'Training error: %.2f%%'],... ker, strarg, C, kercnt, nsv, margin, 100*trn_err );% case 2 % Matlab Optimization toolbox (L1)% model=svmmot(trn, {'ker',ker,'arg',arg,'C',C,'norm',1});%% Alpha = zeros(1,size(trn.X,2));% Alpha(model.sv.inx) = model.Alpha;% bias = model.b;% nsv = model.nsv;% kercnt=model.kercnt;% trn_err = model.trnerr;% margin = model.margin;% exitflag=model.exitflag;% % text = sprintf(...% ['SVM (L1) using QUADPROG of the Optimization Toolbox\n',...% 'Kernel: %s (%s), C: %.4f\n',...% 'Exitflag: %d\n',...% 'Kernel evaluations: %d\n',...% 'Number of Support Vectors: %d\n',...% 'Margin: %.4f\n',...% 'Training error: %.2f%%'],...% ker, strarg, C, exitflag, kercnt, nsv, margin,100*trn_err);%% case 3 % Kernel Schlesinger-Kozinec's algorithm (L2) case 2 % Kernel Schlesinger-Kozinec's algorithm (L2) model=svmquadprog(trn, {'ker',ker,'arg',arg,'C',C,... 'tolabs',param(1),'tolrel',0,'tmax',param(2) }); Alpha = zeros(1,size(trn.X,2)); Alpha(model.sv.inx) = model.Alpha(:)'; bias = model.b; nsv = model.nsv; kercnt=model.kercnt; trn_err = model.trnerr; margin = model.margin; exitflag=model.exitflag; if( exitflag == 1), exitflag = 'found'; else exitflag = 'not found'; end text = sprintf(... ['SVM (L2) by Kernel Schlesinger-Kozinec`s algorithm\n',... 'Kernel: %s (%s), C: %.4f\n',... 'Solution: %s\n', ... 'Number of Support Vectors: %d\n',... 'Kernel evaluations: %d\n',... 'Margin: %.4f\n',... 'Training error: %.2f%%'],... ker, strarg, C, exitflag, nsv, kercnt, margin, trn_err*100 );% case 4 % Matlab Optimization toolbox (L2)% [Alpha,bias,nsv,exitflag,flps,margin,trn_err]=...% svm2mot(trn.X,trn.I,ker,arg,C);%% model=svmmot(trn, {'ker',ker,'arg',arg,'C',C,'norm',2});%% Alpha = zeros(1,size(trn.X,2));% Alpha(model.sv.inx) = model.Alpha;% bias = model.b;% nsv = model.nsv;% kercnt=model.kercnt;% trn_err = model.trnerr;% margin = model.margin;% exitflag=model.exitflag;%% text = sprintf(...% ['SVM (L2) using QUADPROG of the Optimization Toolbox\n',...% 'Kernel: %s (%s), C: %.4f\n',...% 'Exitflag: %d\n',...% 'Kernel evaluations: %d\n',...% 'Number of Support Vectors: %d\n',...% 'Margin: %.4f\n',...% 'Training error: %.2f%%'],...% ker, strarg, C, exitflag, kercnt, nsv, margin,100*trn_err); % case 5 % Kernel Perceptron case 3 % Kernel Perceptron model=kperceptr(trn, {'ker',ker,'arg',arg,'tmax',param(1)}); Alpha = zeros(1,size(trn.X,2)); Alpha(model.sv.inx) = model.Alpha; bias = model.b; nsv = model.nsv; kercnt=model.kercnt; trn_err = model.trnerr; exitflag=model.exitflag; text = sprintf(... ['Kernel Perceptron\n',... 'Kernel: %s (%s)\n',... 'Exitflag: %d\n',... 'Kernel evaluations: %d\n',... 'Number of Support Vectors: %d\n',... 'Training error: %.2f%%'],... ker, strarg, exitflag, kercnt, nsv, 100*trn_err);end% show commentset( data.console,'String', text );return; function []=clrchild(handle)% function []=clraxis(handle)%% CLRCHILD clears children of an object with the given handle.delete(get(handle,'Children'));return;function []=setaxis(handle,rect)% function []=setaxis(handle,rect)%set(handle,'XLim',rect(1:2));set(handle,'YLim',rect(3:4));if size(rect,2)>=6, set(handle,'ZLim',rect(5:6));endreturn;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -