?? bsvm2.html
字號:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>bsvm2.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>new_bsvm2</span>(<span class=defun_in> data, options </span>)<br><span class=h1>% NEW_BSVM2 Multi-class BSVM with L2-soft margin.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = new_bsvm2( data, options ) </span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% This function trains the multi-class SVM classifier based</span><br><span class=help>% on BSVM formulation (bias added to the objective function) and</span><br><span class=help>% L2-soft margin penalization of misclassifications [Franc02][Hsu02].</span><br><span class=help>% The quadratic programming criterion can be optimized by one of the</span><br><span class=help>% following algorithms:</span><br><span class=help>% mdm ... Mitchell-Demyanov-Malozemov</span><br><span class=help>% imdm ... Mitchell-Demyanov-Malozemov Improved 1.</span><br><span class=help>% iimdm ... Mitchell-Demyanov-Malozemov Improved 2.</span><br><span class=help>% kozinec ... Kozinec algorithm.</span><br><span class=help>% keerthi ... NPA algorithm by Keerthi et al.</span><br><span class=help>% kowalczyk ... Based on Kowalczyk's maximal margin perceptron.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% data [struct] Training data:</span><br><span class=help>% .X [dim x num_data] Training vectors.</span><br><span class=help>% .y [1 x num_data] Labels (1,2,...,nclass).</span><br><span class=help>%</span><br><span class=help>% options [struct] Control parameters:</span><br><span class=help>% .ker [string] Kernel identifier. See 'help kernel'.</span><br><span class=help>% .arg [1 x nargs] Kernel argument(s).</span><br><span class=help>% .C [1x1] Regularization constant.</span><br><span class=help>% .qp [string] QP solver to use: 'mdm', 'imdm', 'iimdm' (default), </span><br><span class=help>% 'kozinec', 'kowalczyk','keerthi'.</span><br><span class=help>% .tmax [1x1] Maximal number of iterations.</span><br><span class=help>% .tolabs [1x1] Absolute tolerance stopping condition (default 0.0).</span><br><span class=help>% .tolrel [1x1] Relative tolerance stopping condition (default 0.001).</span><br><span class=help>% .cache [1x1] Number of columns of kernel matrix to be cached.</span><br><span class=help>% .verb [1x1] If 1 then info about training process is printed.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% model [struct] Multi-class SVM classifier:</span><br><span class=help>% .Alpha [nsv x nclass] Weights.</span><br><span class=help>% .b [nclass x 1] Biases.</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>% .options [struct] Copy of input options.</span><br><span class=help>% .t [1x1] Number of iterations.</span><br><span class=help>% .UB [1x1] Upper bound on the optimal solution.</span><br><span class=help>% .LB [1x1] Lower bound on the optimal solution.</span><br><span class=help>% .History [2 x (t+1)] UB and LB with respect to t.</span><br><span class=help>% .trnerr [1x1] Training classification error.</span><br><span class=help>% .kercnt [1x1] Number of kernel evaluations.</span><br><span class=help>% .cputime [1x1] CPU time (measured by tic-toc).</span><br><span class=help>% .qp_stat [struct] Statistics about QP optimization:</span><br><span class=help>% .access [1x1] Number of requested columns matrix H.</span><br><span class=help>% .t [1x1] Number of iterations.</span><br><span class=help>% .UB [1x1] Upper bound on optimal criterion.</span><br><span class=help>% .LB [1x1] Lower bound on optimal criterion.</span><br><span class=help>% .LB_History [1x(t+1)] LB with respect to t.</span><br><span class=help>% .UB_History [1x(t+1)] UB with respect to t.</span><br><span class=help>% .NA [1x1] Number of non-zero elements in solution.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% data = load('pentagon');</span><br><span class=help>% options = struct('ker','rbf','arg',1,'C',10);</span><br><span class=help>% model = bsvm2(data,options )</span><br><span class=help>% figure; </span><br><span class=help>% ppatterns(data); ppatterns(model.sv.X,'ok',12);</span><br><span class=help>% pboundary(model);</span><br><span class=help>%</span><br><span class=help>% See also </span><br><span class=help>% SVMCLASS, OAASVM, OAOSVM.</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>% 29-nov-2004, VF</span><br><span class=help1>% 26-nov-2004, VF</span><br><span class=help1>% 16-Nov-2004, VF</span><br><span class=help1>% 31-may-2004, VF</span><br><span class=help1>% 23-jan-2003, VF</span><br><br><hr>tic;<br><br><span class=comment>% process inputs </span><br><span class=comment>%-------------------------------------------------------</span><br>data=c2s(data);<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>'tmax'</span>), options.tmax=inf; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'tolabs'</span>), options.tolabs=0; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'tolrel'</span>), options.tolrel=0.001; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'qp'</span>), options.qp=<span class=quotes>'iimdm'</span>; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'cache'</span>), options.cache = 1000; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'verb'</span>), options.verb=0; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'qp_verb'</span>), options.qp_verb=0; <span class=keyword>end</span><br><br>[dim,num_data]=size(data.X);<br>nclass = max(data.y);<br><br><span class=comment>% display info</span><br><span class=comment>%---------------------</span><br><span class=keyword>if</span> options.verb == 1,<br> <span class=io>fprintf</span>(<span class=quotes>'Binary rules: %d\n'</span>, nclass);<br> <span class=io>fprintf</span>(<span class=quotes>'Training data: %d\n'</span>, num_data);<br> <span class=io>fprintf</span>(<span class=quotes>'Dimension: %d\n'</span>, dim);<br> <span class=keyword>if</span> isfield( options, <span class=quotes>'ker'</span>), <span class=io>fprintf</span>(<span class=quotes>'Kernel: %s\n'</span>, options.ker); <span class=keyword>end</span><br> <span class=keyword>if</span> isfield( options, <span class=quotes>'arg'</span>), <span class=io>fprintf</span>(<span class=quotes>'arg: %f\n'</span>, options.arg(1)); <span class=keyword>end</span><br> <span class=keyword>if</span> isfield( options, <span class=quotes>'C'</span>), <span class=io>fprintf</span>(<span class=quotes>'C: %f\n'</span>, options.C); <span class=keyword>end</span><br> <span class=io>fprintf</span>(<span class=quotes>'QP solver: %s\n'</span>, options.qp);<br><span class=keyword>end</span><br><br><span class=comment>% call MEX implementation</span><br>[Alpha,b,exitflag,kercnt,access,trnerr,t,NA,UB,LB,History] = bsvm2_mex(...<br> data.X,...<br> data.y,...<br> options.ker,...<br> options.arg,...<br> options.C,...<br> options.qp,...<br> options.tmax,...<br> options.tolabs, ...<br> options.tolrel,...<br> options.cache, ...<br> options.qp_verb );<br><br><span class=comment>% set up model</span><br><span class=comment>%-------------------------</span><br>sv_inx = find( sum(abs(Alpha),1) ~= 0 );<br>Alpha = Alpha(:,sv_inx)';<br><span class=keyword>for</span> i = 1:size(Alpha,2),<br> inx = find( data.y(sv_inx) ~= i);<br> Alpha(inx,i) = -Alpha(inx,i);<br><span class=keyword>end</span><br><br>model.Alpha = Alpha;<br>model.b = b;<br>model.sv.X = data.X(:,sv_inx);<br>model.sv.y = data.y(sv_inx);<br>model.sv.inx = sv_inx;<br>model.nsv = length(sv_inx);<br>model.options = options;<br>model.exitflag = exitflag;<br>model.trnerr = trnerr;<br>model.kercnt = kercnt;<br>model.qp_stat.access = access;<br>model.qp_stat.t = t;<br>model.qp_stat.UB = UB;<br>model.qp_stat.LB = LB;<br>model.qp_stat.LB_History = History(1,:);<br>model.qp_stat.UB_History = History(2,:);<br>model.qp_stat.NA = NA;<br>model.cputime = toc;<br>model.fun = <span class=quotes>'svmclass'</span>;<br><br><span class=jump>return</span>;<br><br><span class=comment>% EOF</span><br></code>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -