📄 perceptron.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>perceptron.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>perceptron</span>(<span class=defun_in>data,options,init_model</span>)<br><span class=h1>% PERCEPTRON Perceptron algorithm to train binary linear classifier. </span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = perceptron(data)</span><br><span class=help>% model = perceptron(data,options)</span><br><span class=help>% model = perceptron(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>% model = perceptron(data) uses the Perceptron learning rule</span><br><span class=help>% to find separating hyperplane from given binary labeled data.</span><br><span class=help>%</span><br><span class=help>% model = perceptron(data,options) specifies stopping condition of</span><br><span class=help>% the algorithm in structure options:</span><br><span class=help>% .tmax [1x1]... maximal number of iterations.</span><br><span class=help>%</span><br><span class=help>% If tmax==-1 then it only returns index (model.last_update)</span><br><span class=help>% of data vector which should be used by the algorithm for updating</span><br><span class=help>% the linear rule in the next iteration.</span><br><span class=help>%</span><br><span class=help>% model = perceptron(data,options,init_model) specifies initial model</span><br><span class=help>% which must contain:</span><br><span class=help>% .W [dim x 1] ... normal vector.</span><br><span class=help>% .b [1x1] ... bias of hyperplane.</span><br><span class=help>% .t [1x1] (optional) ... iteration number.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% data [struct] Labeled (binary) training data. </span><br><span class=help>% .X [dim x num_data] Input 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] </span><br><span class=help>% .tmax [1x1] Maximal number of iterations (default tmax=inf).</span><br><span class=help>% If tmax==-1 then it does not perform any iteration but returns only </span><br><span class=help>% index of the point which should be used to update linear rule.</span><br><span class=help>% </span><br><span class=help>% init_model [struct] Initial model; must contain items</span><br><span class=help>% .W, .b and .t (see above).</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% model [struct] Binary linear classifier:</span><br><span class=help>% .W [dim x 1] Normal vector of hyperplane.</span><br><span class=help>% .b [1x1] Bias of hyperplane.</span><br><span class=help>% </span><br><span class=help>% .exitflag [1x1] 1 ... perceptron has converged.</span><br><span class=help>% 0 ... number of iterations exceeded tmax.</span><br><span class=help>% .t [int] Number of iterations.</span><br><span class=help>% .last_update [d x 1] Index of the last point used for update.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% data = genlsdata( 2, 50, 1);</span><br><span class=help>% model = perceptron(data)</span><br><span class=help>% figure; ppatterns(data); pline(model); </span><br><span class=help>%</span><br><span class=help>% See also </span><br><span class=help>% EKOZINEC, MPERCEPTRON, LINCLASS.</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>% 17-sep-2003, VF</span><br><span class=help1>% 16-Feb-2003, VF</span><br><span class=help1>% 20-Jan-2003, VF</span><br><span class=help1>% 7-jan-2002, VF. A new coat.</span><br><span class=help1>% 24. 6.00 V. Hlavac, comments polished.</span><br><span class=help1>% 15-dec-2000, texts, returns bad point</span><br><br><hr><span class=comment>% get data dimensions</span><br>[dim,num_data] = size(data.X);<br><br><span class=comment>% Process 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>'tmax'</span>), options.tmax = inf; <span class=keyword>end</span><br><br><span class=keyword>if</span> <span class=stack>nargin</span> < 3,<br> <span class=comment>% create init model</span><br> <span class=comment>%----------------------------</span><br> model.W = zeros(dim,1);<br> model.b = 0;<br><span class=keyword>else</span><br> <span class=comment>% take init model from input</span><br> <span class=comment>%----------------------------</span><br> model = init_model;<br><span class=keyword>end</span><br><span class=keyword>if</span> ~isfield(model,<span class=quotes>'t'</span>), model.t = 0; <span class=keyword>end</span><br><br>model.exitflag = 0;<br>model.last_update = 0;<br><br><span class=comment>% Add one constant coordinates to the data and swap</span><br><span class=comment>% points from the second class along the origin.</span><br><span class=comment>% ----------------------------------------------------</span><br>data.X = [data.X; ones(1,num_data)];<br>dim=dim+1;<br>inx = find(data.y==2);<br>data.X(:,inx) = -data.X(:,inx);<br>W = [model.W;model.b]; <br><br><span class=keyword>if</span> options.tmax == -1,<br> <span class=comment>% return index of point which should be used to update linear rule</span><br> <span class=comment>%----------------------------------------------------------------------</span><br> fvalue = data.X'*W;<br> inx = find( fvalue <= 0 );<br> <br> <span class=keyword>if</span> length(inx)==0,<br> model.exitflag = 1;<br> <span class=keyword>else</span><br> model.exitflag = 0;<br> model.last_update = inx(1);<br> <span class=keyword>end</span><br><span class=keyword>else</span><br><br> <span class=comment>% main loop </span><br> <span class=comment>% -----------------------------------</span><br> <span class=keyword>while</span> options.tmax > model.t & model.exitflag == 0,<br> model.t = model.t+1;<br> <br> <span class=comment>% Compute discriminant function for all data</span><br> fvalue = data.X'*W;<br> inx = find( fvalue <= 0 );<br> <br> <span class=keyword>if</span> length(inx)==0,<br> model.exitflag = 1;<br> <span class=keyword>else</span><br> inx = inx(1);<br> model.exitflag = 0;<br> model.last_update = inx;<br><br> <span class=comment>% Update model using the Perceptron rule</span><br> W = W + data.X(:,inx);<br> <span class=keyword>end</span><br> <span class=keyword>end</span><br> <br> <span class=comment>% separates normal vector and bias</span><br> model.W = W(1:dim-1);<br> model.b = W(dim);<br><span class=keyword>end</span><br><br>model.fun = <span class=quotes>'linclass'</span>;<br><br><span class=jump>return</span>;<br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -