📄 smo.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>smo.m</title><link rel="stylesheet" type="text/css" href="../../m-syntax.css"></head><body><code><span class=defun_kw>function</span> <span class=defun_out>model </span>= <span class=defun_name>smo</span>(<span class=defun_in> data, options, init_model</span>)<br><span class=h1>% SMO Sequential Minimal Optimization for binary SVM with L1-soft margin.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = smo( data )</span><br><span class=help>% model = smo( data, options )</span><br><span class=help>% model = smo( data, options, init_model)</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% This function is implementation of the Sequential Minimal </span><br><span class=help>% Optimizer (SMO) [Platt98] to train the binary Support Vector </span><br><span class=help>% Machines Classifier with L1-soft margin.</span><br><span class=help>% </span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% data [struct] Binary labeled training vectors:</span><br><span class=help>% .X [dim x num_data] Training vectors.</span><br><span class=help>% .y [a x num_data] Labels (1 or 2).</span><br><span class=help>%</span><br><span class=help>% options [struct] Control parameters:</span><br><span class=help>% .ker [string] Kernel identifier (default 'linear'); </span><br><span class=help>% See 'help kernel'for more info.</span><br><span class=help>% .arg [1 x nargs] Kernel argument(s) (default 1).</span><br><span class=help>% .C Regularization constant (default C=inf). The constant C can </span><br><span class=help>% be given as:</span><br><span class=help>% C [1x1] .. for all data.</span><br><span class=help>% C [1x2] .. for each class separately C=[C1,C2].</span><br><span class=help>% C [1xnum_data] .. for each training vector separately.</span><br><span class=help>% .eps [1x1] SMO paramater (default 0.001).</span><br><span class=help>% .tol [1x1] Tolerance of KKT-conditions (default 0.001).</span><br><span class=help>% </span><br><span class=help>% init_model [struct] Specifies initial model:</span><br><span class=help>% .Alpha [num_data x 1] Initial model. </span><br><span class=help>% .b [1x1] Bias.</span><br><span class=help>% If not given then it is set to zero by default.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% model [struct] Binary SVM classifier:</span><br><span class=help>% .Alpha [nsv x 1] Weights (Lagrangians).</span><br><span class=help>% .b [1x1] Bias.</span><br><span class=help>% .sv.X [dim x nsv] Support vectors.</span><br><span class=help>% .nsv [1x1] Number of Support Vectors.</span><br><span class=help>% .kercnt [1x1] Number of kernel evaluations used by SMO.</span><br><span class=help>% .trnerr [1x1] Training classification error.</span><br><span class=help>% .margin [1x1] Margin of the found classifier.</span><br><span class=help>% .cputime [1x1] Used CPU time in seconds.</span><br><span class=help>% .options [struct] Copy of used options.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% trn = load('riply_trn'); </span><br><span class=help>% model = smo(trn,struct('ker','rbf','C',10,'arg',1));</span><br><span class=help>% figure; ppatterns(trn); psvm(model); </span><br><span class=help>% tst = load('riply_tst');</span><br><span class=help>% ypred = svmclass( tst.X, model );</span><br><span class=help>% cerror( ypred, tst.y )</span><br><span class=help>%</span><br><span class=help>% See also </span><br><span class=help>% SVMCLASS, SVMLIGHT, SVMQUADPROG.</span><br><span class=help>%</span><br><hr><span class=help1>% <span class=help1_field>About:</span> Statistical Pattern Recognition Toolbox</span><br><span class=help1>% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac</span><br><span class=help1>% <a href="http://www.cvut.cz">Czech Technical University Prague</a></span><br><span class=help1>% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a></span><br><span class=help1>% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a></span><br><br><span class=help1>% <span class=help1_field>Modifications:</span></span><br><span class=help1>% 23-may-2004, VF</span><br><span class=help1>% 17-September-2001, V. Franc, created</span><br><br><hr><span class=comment>% timer</span><br>tic;<br><br><span class=comment>% Input arguments </span><br><span class=comment>%-------------------------------------------------------</span><br><span class=keyword>if</span> <span class=stack>nargin</span> < 2, options = []; <span class=keyword>else</span> options=c2s(options); <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'ker'</span>), options.ker = <span class=quotes>'linear'</span>; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'arg'</span>), options.arg = 1; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'C'</span>), options.C = inf; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'eps'</span>), options.eps = 0.001; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'tol'</span>), options.tol = 0.001; <span class=keyword>end</span><br><br>[dim,num_data] = size(data.X);<br><span class=keyword>if</span> <span class=stack>nargin</span> < 3,<br> init_model.Alpha = zeros(num_data,1); <br> init_model.b = 0;<br><span class=keyword>end</span><br><br><span class=comment>% run optimizer</span><br><span class=comment>%----------------------------------------------------</span><br>[model.Alpha, model.b, model.nsv, model.kercnt, model.trnerr, model.margin]...<br> = smo_mex(data.X, data.y, options.ker, options.arg, options.C, ...<br> options.eps, options.tol, init_model.Alpha, init_model.b );<br><br><span class=comment>% set up output</span><br><span class=comment>%------------------------------------------------------</span><br>inx = find( model.Alpha );<br>model.sv.X = data.X(:,inx);<br>model.sv.y = data.y(inx);<br>model.sv.inx = inx;<br>model.Alpha = model.Alpha(inx);<br>model.Alpha(find(model.sv.y == 2)) = -model.Alpha(find(model.sv.y == 2));<br><br><span class=comment>% computes normal vector of the hypeprlane if linear kernel used</span><br><span class=keyword>if</span> strcmpi(options.ker,<span class=quotes>'linear'</span>),<br> model.W = model.sv.X*model.Alpha;<br><span class=keyword>end</span><br><br>model.options = options;<br>model.fun = <span class=quotes>'svmclass'</span>;<br><br>model.cputime = toc;<br><br><span class=jump>return</span>;<br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -