?? mlsigmoid.html
字號:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>mlsigmoid.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>varargout</span>=<span class=defun_name>mlsigmoid</span>(<span class=defun_in>arg1,arg2,arg3</span>)<br><span class=h1>% MLSIGMOID Fitting a sigmoid function using ML estimation.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% model = mlsigmoid(data,options)</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% model = mlsigmoid(data,options) computes Maximum-Likelihood</span><br><span class=help>% estimation of parameters of sigmoid function [Platt99a]</span><br><span class=help>% p(y==1|x) = 1/(1+exp(A(1)*x+A(2))),</span><br><span class=help>%</span><br><span class=help>% used to describe a posteriory probability of a hidden binary </span><br><span class=help>% state y from {1,2}. The conditional probabilities p(x|y) are </span><br><span class=help>% assumed to be uni-variate Gaussian distribution. The training </span><br><span class=help>% samples {(X(1),y(1)),...,(X(num_data),y(num_data))} assumed to </span><br><span class=help>% be i.i.d. are given in data.X and data.y.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% data [struct] Input sample:</span><br><span class=help>% .X [1 x num_data] Values of discriminant function.</span><br><span class=help>% .y [1 x num_data] Corresponding class label (1 or 2).</span><br><span class=help>%</span><br><span class=help>% options [struct] Control parameters:</span><br><span class=help>% .regul [1x1] If 1 then fitting is regularized to prevent </span><br><span class=help>% overfitting (default 1).</span><br><span class=help>% .verb [1x1] If 1 then progress info is displayed (default 0).</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% model.A [1x2] Parameters of sigmoid function.</span><br><span class=help>% model.logl [1x1] Value of the log-likelihood criterion.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% help demo_svmpout;</span><br><span class=help>%</span><br><span class=help>% See also </span><br><span class=help>% SIGMOID.</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>% 03-jun-2004, VF</span><br><span class=help1>% 11-oct-2003, VF</span><br><span class=help1>% 20-sep-2003, VF</span><br><span class=help1>% 08-may-2003, VF</span><br><br><hr><span class=keyword>if</span> <span class=stack>nargin</span> > 2,<br> <span class=comment>% evaluates log-likelihood (objective function)</span><br> [L,grad] = sigmoidlogl(arg1,arg2,arg3);<br> <span class=stack>varargout</span>{1} = L;<br> <span class=stack>varargout</span>{2} = grad;<br> <span class=jump>return</span>;<br><span class=keyword>end</span><br> <br><span class=comment>% process inputs </span><br><span class=comment>%-------------------------------------------------------</span><br>data = c2s(arg1);<br><span class=keyword>if</span> <span class=stack>nargin</span> == 1, options=[]; <span class=keyword>else</span> options=c2s(arg2); <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>'regul'</span>), options.regul=1; <span class=keyword>end</span><br><br><span class=comment>% values of discriminant function</span><br><span class=comment>%-------------------------------------------------------</span><br>outs = data.X(:);<br><br><span class=comment>% targets </span><br><span class=comment>%-------------------------------------------------------</span><br>N1=length(find(data.y==1));<br>N2=length(find(data.y==2));<br><span class=keyword>if</span> options.regul,<br> <span class=comment>% use regularization</span><br> T1=(N1+1)/(N2+2);<br> T2=1/(N2+2);<br><span class=keyword>else</span><br> T1=1; <br> T2=0;<br><span class=keyword>end</span><br><br>targets=zeros(N1+N2,1);<br>targets(find(data.y==1))=T1;<br>targets(find(data.y==2))=T2;<br><br><span class=comment>% set options of Matlab optimizer</span><br><span class=comment>%-------------------------------------------------------</span><br><span class=keyword>if</span> options.verb, <br> opt=optimset(<span class=quotes>'Display'</span>,<span class=quotes>'on'</span>,<span class=quotes>'GradObj'</span>,<span class=quotes>'on'</span>);<br><span class=keyword>else</span><br> opt=optimset(<span class=quotes>'Display'</span>,<span class=quotes>'off'</span>,<span class=quotes>'GradObj'</span>,<span class=quotes>'on'</span>);<br><span class=keyword>end</span><br><br><span class=comment>% run optimizer to maximize the log-likelihood</span><br><span class=comment>%------------------------------------------------------------</span><br>x0=[1 1];<br>[model.A,model.logl] = fminunc(<span class=quotes>'mlsigmoid'</span>,x0,opt,targets,outs);<br><br>model.fun = <span class=quotes>'sigmoid'</span>;<br><span class=stack>varargout</span>{1} = model;<br><br><span class=jump>return</span>;<br><br><br><span class=comment>%=======================================================</span><br><span class=defun_kw>function</span> <span class=defun_out>[L,grad] </span>= <span class=defun_name>sigmoidlogl</span>(<span class=defun_in>A,targets,outs</span>)<br><span class=comment>% SIGMOIDLOGL Returns log-likelihood of sigmoid model.</span><br><span class=comment>%</span><br><span class=comment>% [L,grad] = sigmoidlogl(A,targets,outs)</span><br><span class=comment>%</span><br><span class=comment>% Description:</span><br><span class=comment>% It evaluates log-likelihood function</span><br><span class=comment>% L = -sum( targets(i)*log(p_i)+(1-targets(i))*log(1-p_i)),</span><br><span class=comment>%</span><br><span class=comment>% where p_i = 1/(1+exp(A(1)*outs(i)+A(2))) is a sigmoid function.</span><br><span class=comment>%</span><br><br>tmp=exp(A(1)*outs+A(2));<br><br>p=1./(1+tmp); <br><br><span class=comment>% prevents dividing by 0</span><br>inx=find(p==0); p(inx)=1e-12;<br>inx=find(p==1); p(inx)=1-1e-12;<br><br>L = - sum( targets.*log(p)+(1-targets).*log(1-p));<br><br>grad(1)=sum(targets.*outs+(outs.*tmp)./(1+tmp) - outs);<br>grad(2)=sum(targets + tmp./(1+tmp ) - 1);<br><br><span class=jump>return</span>;<br><span class=comment>% EOF</span><br></code>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -