📄 rbfpreimg2.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>rbfpreimg2.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>z </span>= <span class=defun_name>rbfpreimg2</span>(<span class=defun_in>varargin</span>)<br><span class=h1>% RBFPREIMG2 RBF pre-image problem by Gradient optimization.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% z = rbfpreimg2(model)</span><br><span class=help>% z = rbfpreimg2(model,options)</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% z = rbfpreimg2(model) it uses gradient method to solve </span><br><span class=help>% the pre-image problem for the Radial Basis Function (RBF) </span><br><span class=help>% kernel. The function 'fminunc' of the Matlab Optimization </span><br><span class=help>% toolbox is exploited for 1D search along the gradient </span><br><span class=help>% direction.</span><br><span class=help>%</span><br><span class=help>% z = rbfpreimg2(model,options) use to specify the control</span><br><span class=help>% parameters of the gradient optimization.</span><br><span class=help>% </span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% model [struct] Kernel expansion:</span><br><span class=help>% .Alpha [num_data x 1] Weight vector.</span><br><span class=help>% .sv.X [dim x num_data] Vectors determining the kernel expansion.</span><br><span class=help>% .options.arg [1x1] Argument of the RBF kernel (see 'help kernel').</span><br><span class=help>%</span><br><span class=help>% options [struct] Control parameters:</span><br><span class=help>% .min_improvement [1x1] Minimal allowed improvement of the objective </span><br><span class=help>% function in two consecutive steps (default 1e-3).</span><br><span class=help>% options.start_t [1x1] Starting value of the 1D search procedure </span><br><span class=help>% (default 1e-3).</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% z [dim x 1] Found preimage.</span><br><span class=help>%</span><br><span class=help>% See also </span><br><span class=help>% RBFPREIMG, RBFPREIMG3, RSRBF, KPCAREC.</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>% 10-jun-2004, VF</span><br><span class=help1>% 03-dec-2003, VF</span><br><br><hr><span class=comment>% process input arguments</span><br><span class=comment>%----------------------------------</span><br><span class=keyword>if</span> <span class=stack>nargin</span> > 2,<br> z=foo(<span class=stack>varargin</span>{1},<span class=stack>varargin</span>{2},<span class=stack>varargin</span>{3},<span class=stack>varargin</span>{4},<span class=stack>varargin</span>{5});<br> <span class=jump>return</span>;<br><span class=keyword>else</span><br> model = <span class=stack>varargin</span>{1};<br> <span class=keyword>if</span> <span class=stack>nargin</span> < 2, options=[]; <span class=keyword>else</span> options = c2s( <span class=stack>varargin</span>{2}); <span class=keyword>end</span>
<br> <span class=keyword>if</span> ~isfield(options,<span class=quotes>'min_improvement'</span>), options.min_improvement = 1e-3; <span class=keyword>end</span><br> <span class=keyword>if</span> ~isfield(options,<span class=quotes>'start_t'</span>), options.start_t = 1e-3; <span class=keyword>end</span><br> <span class=keyword>if</span> ~isfield(options,<span class=quotes>'attempts'</span>), options.attempts = 10; <span class=keyword>end</span><br><span class=keyword>end</span><br><br>[dim,num_sv]=size(model.sv.X);<br>ker = <span class=quotes>'rbf'</span>;<br>arg = model.options.arg;<br>iXi = sum( model.sv.X.^2)';<br>s2 = arg^2;<br><br><span class=comment>% Selection of the starting point out of the model.sv.X.</span><br><span class=comment>% The point in which is the objective function minimal is taken.</span><br><span class=comment>% Minimum over 50 randomly drawn points is used.</span><br><span class=comment>%--------------------------------------------------------------</span><br><br>rand_inx = randperm( num_sv );<br>rand_inx = rand_inx(1:min([num_sv,50]));<br>Z = model.sv.X(:,rand_inx);<br><br>fval = kernel(Z,model.sv.X,ker,arg)*model.Alpha(:);<br>fval = -fval.^2;<br><br>[dummy, inx ] = min( fval );<br>z = Z(:,inx );<br><br><span class=comment>% Gradient descent optimization </span><br><span class=comment>%--------------------------------------</span><br>change=inf;<br>opt=optimset(<span class=quotes>'display'</span>,<span class=quotes>'off'</span>,<span class=quotes>'Diagnostics'</span>,<span class=quotes>'off'</span>,<span class=quotes>'LargeScale'</span>,<span class=quotes>'off'</span>);<br><span class=error>warning</span> off MATLAB:divideByZero;<br><span class=keyword>while</span> change > options.min_improvement,<br> <br> <span class=comment>% compute gradient</span><br> dotp = kernel( model.sv.X,z,ker,arg ).*model.Alpha(:);<br> dz = z*sum(dotp) - model.sv.X*dotp;<br><br> <span class=comment>% auxiciliary variables</span><br> zXi = model.sv.X'*z;<br> dzXi = model.sv.X'*dz;<br> <br> Ai = -(1/(2*s2)) * (iXi - 2*zXi + z'*z);<br> Bi = -(1/s2) * (z'*dz - dzXi);<br> C = -(1/(2*s2)) * (dz'*dz);<br> <br> <span class=comment>% 1D-search to determine the size of the step in the gradient direction</span><br> [t,fval] = fminunc(<span class=quotes>'rbfpreimg2'</span>,options.start_t,opt,model.Alpha,Ai,Bi,C);<br>
<br> old_z = z;<br> z = z + dz*t;<br> <br> change = sum((z-old_z).^2);<br><span class=keyword>end</span><br><br><span class=jump>return</span>;<br><br><span class=comment>%---------------------------------</span><br><span class=defun_kw>function</span> <span class=defun_out>f</span>=<span class=defun_name>foo</span>(<span class=defun_in>t,Alpha,Ai,Bi,C</span>)<br><span class=comment>% </span><br><br>f = Alpha(:)'*exp(Ai + Bi*t + C*t^2);<br>f = -f^2;<br><br><span class=jump>return</span>;<br><span class=comment>% EOF</span><br><br><br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -