📄 oaosvm.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>oaosvm.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>oaosvm</span>(<span class=defun_in>data,options</span>)<br><span class=h1>% OAOSVM Multi-class SVM using One-Against-One decomposition.</span><br><span class=help>% </span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = oaosvm( data )</span><br><span class=help>% model = oaosvm( data, options )</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% model = oaosvm( data ) uses one-agains-one deconposition</span><br><span class=help>% to train the multi-class Support Vector Machines (SVM)</span><br><span class=help>% classifier. The classification into nclass classes </span><br><span class=help>% is decomposed into nrule = (nclass-1)*nclass/2 binary </span><br><span class=help>% problems.</span><br><span class=help>%</span><br><span class=help>% model = oaosvm( data, options) allows to specify the</span><br><span class=help>% binary SVM solver and its paramaters.</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 of training data (1,2,...,nclass). </span><br><span class=help>%</span><br><span class=help>% options [struct] Control parameters:</span><br><span class=help>% .bin_svm [string] Function which implements the binary SVM </span><br><span class=help>% solver; (default 'smo').</span><br><span class=help>% .verb [1x1] If 1 then a progress info is displayed (default 0).</span><br><span class=help>% The other fields of options specifies the options of the binary</span><br><span class=help>% solver (e.g., ker, arg, C). See help of the selected solver.</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 majority voting classifier:</span><br><span class=help>% .Alpha [nsv x nrule] Weights (Lagrangeans).</span><br><span class=help>% .bin_y [2 x nrule] Translation between binary responses of</span><br><span class=help>% the discriminant functions and class labels.</span><br><span class=help>% .b [nrule x 1] Biases of discriminant functions.</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>% .trnerr [1x1] Training error.</span><br><span class=help>% .kercnt [1x1] Number of kernel evaluations.</span><br><span class=help>% .options [struct[ Copy of input argument options.</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',1000,'verb',1);</span><br><span class=help>% model = oaosvm( data, options );</span><br><span class=help>% figure; </span><br><span class=help>% ppatterns(data); ppatterns(model.sv.X,'ok',13);</span><br><span class=help>% pboundary( model );</span><br><span class=help>% </span><br><span class=help>% See also </span><br><span class=help>% MVSVMCLASS, OAASVM.</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-2005, 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>% 25-jan-2005, VF, option solver replaced by bin_svm </span><br><span class=help1>% 26-may-2004, VF</span><br><span class=help1>% 4-feb-2004, VF</span><br><span class=help1>% 9-Feb-2003, VF</span><br><br><hr><span class=comment>% Process inputs</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>'verb'</span>), options.verb = 0; <span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(options,<span class=quotes>'bin_svm'</span>), options.bin_svm = <span class=quotes>'smo'</span>; <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><br>[dim,num_data] = size(data.X);<br>nclass = max(data.y);<br>nrule = (nclass-1)*nclass/2;<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>, nrule);<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=keyword>end</span><br><br><span class=comment>%----------------------------------------</span><br>Alpha = zeros(num_data,nrule);<br>b = zeros(nrule,1);<br>bin_y = zeros(2,nrule);<br>kercnt = 0;<br><br><span class=comment>% One-Against-One decomposition</span><br><span class=comment>%-----------------------------------</span><br>rule = 0;<br><span class=keyword>for</span> class1 = 1:nclass-1,<br> <span class=keyword>for</span> class2 = class1+1:nclass,<br> <br> rule = rule + 1;<br> <br> <span class=keyword>if</span> options.verb == 1,<br> <span class=io>fprintf</span>(<span class=quotes>'building rule %d-%d (%d of %d)'</span>, ...<br> class1, class2, rule, nrule );<br> <span class=keyword>end</span><br> <br> <span class=comment>% set binary subtask</span><br> <span class=comment>%---------------------------------------------</span><br> bin_y(1,rule) = class1;<br> bin_y(2,rule) = class2;<br> data_inx = find(data.y==class1 | data.y==class2);<br> bin_data.X = data.X(:, data_inx);<br> bin_data.y = data.y(data_inx);<br> bin_data.y(find(bin_data.y == class1)) = 1;<br> bin_data.y(find(bin_data.y == class2)) = 2;<br> <br> <span class=comment>% solve binary subtask</span><br> <span class=comment>%---------------------------------------------</span><br> bin_model = <span class=eval>feval</span>( options.bin_svm, bin_data, options );<br><br> Alpha(data_inx(bin_model.sv.inx),rule) = bin_model.Alpha(:);<br> b(rule) = bin_model.b;<br><br> kercnt = kercnt + bin_model.kercnt;<br> <br> <span class=comment>% progress info</span><br> <span class=comment>%-----------------------------</span><br> <span class=keyword>if</span> options.verb ==1,<br> <span class=keyword>if</span> isfield(bin_model, <span class=quotes>'trnerr'</span>),<br> <span class=io>fprintf</span>(<span class=quotes>': trnerr = %.4f'</span>, bin_model.trnerr);<br> <span class=keyword>end</span><br> <span class=keyword>if</span> isfield(bin_model, <span class=quotes>'margin'</span>),<br> <span class=io>fprintf</span>(<span class=quotes>', margin = %f'</span>, bin_model.margin );<br> <span class=keyword>end</span><br> <span class=io>fprintf</span>(<span class=quotes>'\n'</span>);<br> <span class=keyword>end</span><br> <br> <span class=keyword>end</span><br><span class=keyword>end</span><br><br><span class=comment>% set output model</span><br><span class=comment>%---------------------------------</span><br><br><span class=comment>% indices of all support vectors</span><br>inx = find(sum(abs(Alpha),2)~= 0);<br><br>model.Alpha = Alpha(inx,:);<br>model.b = b;<br>model.bin_y = bin_y;<br>model.sv.X = data.X(:,inx);<br>model.sv.y = data.y(inx);<br>model.sv.inx = inx;<br>model.nsv = length(inx);<br>model.kercnt = kercnt;<br>model.options = options;<br>model.fun = <span class=quotes>'mvsvmclass'</span>;<br>model.trnerr = cerror( mvsvmclass(data.X, model), 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>'Total training error = %.4f\n'</span>, model.trnerr);<br><span class=keyword>end</span><br><br><span class=jump>return</span>;<br><span class=comment>% EOF</span><br><br><br><br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -