weaklearner_fast.html
来自「matlab最新统计模式识别工具箱」· HTML 代码 · 共 103 行
HTML
103 行
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>weaklearner_fast.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>weaklearner_fast</span>(<span class=defun_in>data</span>)<br><span class=h1>% WEAKLEARNER Produce classifier thresholding single feature.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = weaklearner(data)</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% This function produce a weak binary classifier which assigns</span><br><span class=help>% input vector x to classes [1,2] based on thresholding a single </span><br><span class=help>% feature. The output is a model which defines the threshold </span><br><span class=help>% and feature index such that the weighted error is minimized.</span><br><span class=help>% This weak learner can be used with the AdaBoost classifier</span><br><span class=help>% (see 'help adaboost') as a feature selection method.</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] Binary labels (1 or 2).</span><br><span class=help>% .D [1 x num_data] Weights of training vectors (optional).</span><br><span class=help>% If not given then D is set to be uniform distribution.</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 the hyperplane.</span><br><span class=help>% .fun = 'linclass'.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% help adaboost</span><br><span class=help>%</span><br><span class=help>% See also: </span><br><span class=help>% ADABOOST, ADACLASS.</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-2004, 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>% 31-jan-2007, VF, careful handling the bias value</span><br><span class=help1>% 01-dec-2006, SC, sharat@mit.edu; wrote fast version</span><br><span class=help1>% 25-aug-2004, VF</span><br><span class=help1>% 11-aug-2004, VF</span><br><br><br><hr>[dim,num_data] = size(data.X);<br><span class=keyword>if</span>(~isfield(data,<span class=quotes>'D'</span>))<br> data.D = ones(1,num_data)/num_data;<br><span class=keyword>end</span>;<br><br>W = zeros(dim,1);<br>Errors = zeros(dim,1);<br><br><span class=keyword>for</span> i=1:dim,<br> [x,idx] = sort(data.X(i,:));<br> y = data.y(idx);<br> D = data.D(idx);<br> Sp= zeros(1,num_data);<br> Sn= zeros(1,num_data);<br> Sp(y==1) = D(y==1);<br> Sn(y==2) = D(y==2); <br> Sp = cumsum(Sp); <br> Sn = cumsum(Sn);<br> Tp = Sp(<span class=keyword>end</span>);<br> Tn = Sn(<span class=keyword>end</span>);<br> err = (Sp+Tn-Sn);<br> [minerr1,inx1]= min(err);<br> [minerr2,inx2] = min(Tp+Tn-err);<br> <span class=keyword>if</span> minerr1 < minerr2,<br> W(i) = 1;<br> Errors(i) = minerr1;<br> <span class=keyword>if</span> inx1 < num_data, b(i) = -(x(inx1)+x(inx1+1))*0.5; <span class=keyword>else</span> b(i)=-(x(inx1)+1); <span class=keyword>end</span><br> <span class=keyword>else</span><br> W(i) = - 1;<br> Errors(i) = minerr2;<br> <span class=keyword>if</span> inx2 < num_data, b(i) = (x(inx2)+x(inx2+1))*0.5; <span class=keyword>else</span> b(i) = x(inx2)+1; <span class=keyword>end</span><br> <span class=keyword>end</span><br><span class=keyword>end</span><br><br>[dummy,inx] = min(Errors);<br>model.W = zeros(dim,1);<br>model.W(inx) = W(inx);<br>model.b = b(inx);<br>model.fun = <span class=quotes>'linclass'</span>;<br>model.dim = inx;<br><br>y = linclass(data.X,model);<br><span class=comment>%err = sum((y(:)~=data.y(:)).*data.D(:));</span><br><br><span class=jump>return</span>;<br></code>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?