?? kperceptr.html
字號:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>kperceptr.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>kperceptr</span>(<span class=defun_in>data,options</span>)<br><span class=h1>% KPERCEPTR Kernel Perceptron.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = kperceptr(data)</span><br><span class=help>% model = kperceptr(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 is an implementation of the kernel version</span><br><span class=help>% of the Perceptron algorithm. The kernel perceptron search </span><br><span class=help>% for the kernel binary classifier with zero emprical error.</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 data:</span><br><span class=help>% .X [dim x num_data] Vectors.</span><br><span class=help>% .y [1 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.</span><br><span class=help>% .tmax [1x1] Maximal number of iterations (default inf).</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% model [struct] Found kernel classifer:</span><br><span class=help>% .Alpha [nsv x 1] Multipliers of the training data.</span><br><span class=help>% .b [1x1] Bias of the decision rule.</span><br><span class=help>% .sv.X [dim x nsv] Training data with non-zero Alphas.</span><br><span class=help>% .exitflag [1x1] 1 ... Perceptron has converged.</span><br><span class=help>% 0 ... Maximal number of iterations exceeded.</span><br><span class=help>% .iter [1x1] Number of iterations.</span><br><span class=help>% .kercnt [1x1] Number of kernel evaluations.</span><br><span class=help>% .trnerr [1x1] Training classification error; Note: if exitflag==1 </span><br><span class=help>% then trnerr = 0.</span><br><span class=help>% .options [struct] Copy of options.</span><br><span class=help>% .cputime [real] Used cputime in seconds.</span><br><span class=help>% </span><br><span class=help>% If the linear kernel is used then model.W [dim x 1] contains </span><br><span class=help>% normal vector of the separating hyperplane.</span><br><span class=help>% </span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% data = load('vltava');</span><br><span class=help>% model = kperceptr(data, struct('ker','poly','arg',2));</span><br><span class=help>% figure; ppatterns(data); pboundary(model);</span><br><span class=help>% </span><br><span class=help>% See also SVMCLASS, SVM.</span><br><span class=help>%</span><br><hr><span class=help1>% <span class=help1_field>Modifications:</span> </span><br><span class=help1>% 10-may-2004, VF</span><br><span class=help1>% 18-July-2003, VF</span><br><span class=help1>% 21-Nov-2001, V. Franc</span><br><br><hr>tic;<br><br><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>'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>'tmax'</span>), options.tmax = inf; <span class=keyword>end</span><br><br>[dim, num_data ] = size( data.X );<br><br><span class=comment>% change {1,2} --> {1,-1}</span><br>y = data.y;<br>y(find(y==2)) = -1;<br><br><span class=comment>% inicialize multiliers Alpha and bias</span><br><span class=comment>% =========================================</span><br>Alpha = zeros( num_data,1 );<br>dfce = zeros(num_data,1); <span class=comment>% cache for f(x_i)=<Phi(x_i),w>+b</span><br>b = 0;<br>exitflag = 0;<br>iter = 0;<br>kercnt = 0;<br><br><span class=comment>% Main loop</span><br><span class=comment>%====================================</span><br><span class=keyword>while</span> iter < options.tmax & exitflag == 0,<br> <br> iter = iter + 1;<br> <br> [min_dfce, inx ] = min( dfce.*y(:) );<br> <br> <span class=keyword>if</span> min_dfce <=0 ,<br> <br> <span class=comment>% Perceptron rule in terms of dot products</span><br> old_alpha = Alpha(inx);<br> old_b = b;<br> Alpha(inx) = old_alpha + y(inx);<br> b = old_b + y(inx);<br> <br> <span class=comment>% Updates cache</span><br> k_inx = kernel(data.X,data.X(:,inx), options.ker, options.arg );<br> kercnt = kercnt + num_data;<br> <br> dfce = dfce + (Alpha(inx)-old_alpha)*k_inx + b - old_b;<br> <br> <span class=keyword>else</span><br> exitflag = 1;<br> <br> <span class=comment>% scales f(x) such that f(x)=1 for the patterns closest to</span><br> <span class=comment>% the separating hyperplane</span><br> Alpha = Alpha/min_dfce;<br> b = b/min_dfce;<br> <span class=keyword>end</span><br> <br><span class=keyword>end</span><br><br><span class=comment>% fill up structure model</span><br><span class=comment>%=================================</span><br>inx = find( Alpha ~= 0);<br>Alpha = Alpha(inx);<br><br>model.Alpha = Alpha(:);<br>model.b = b;<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.options = options;<br>model.iter = iter;<br>model.kercnt = kercnt;<br>model.trnerr = length( find(dfce.*y(:) < 0))/num_data;<br>model.exitflag = exitflag;<br>model.fun = <span class=quotes>'svmclass'</span>;<br><br><span class=keyword>if</span> strcmpi(<span class=quotes>'linear'</span>,options.ker),<br> model.W = model.sv.X * model.Alpha;<br><span class=keyword>end</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 + -