?? testp.m
字號:
%TESTP Error estimation of Parzen classifier% % E = TESTP(A,H,T)% E = TESTP(A,H)% % INPUT% A input dataset% H matrix smoothing parameters (optional, def: determined via% parzenc)% T validation dataset (optional)%% OUTPUT% E estimated error rate%% DESCRIPTION % Tests a dataset T on dataset A using a Parzen classification and returns% the classification error E. Returns the leave-one-out error estimate. If% H is not given, it is determined by PARZENC.% % SEE ALSO% DATASETS, MAPPINGS, PARZEN_MAP, PARZENML, PARZENC. % Copyright: R.P.W. Duin, duin@ph.tn.tudelft.nl% Faculty of Applied Physics, Delft University of Technology% P.O. Box 5046, 2600 GA Delft, The Netherlands% may be to be merged with parzen_map, see also testk% $Id: testp.m,v 1.6 2003/10/19 14:41:12 bob Exp $function e = testp(a,h,t) prtrace(mfilename); if nargin < 2, [W,h] = parzenc(a); end [m,k,c] = getsize(a); nlab = getnlab(a); lablist = getlablist(a); p = getprior(a); if length(h) == 1, h = h*ones(1,c); end if length(h) ~= c, error('Wrong number of smoothing parameters'); end % if no validation dataset is specified if nargin <= 2 % find for each sample cross-validated estimate % of aposteriori probability. d = classp(a,nlab,h,p); [dmax,J] = max(d',[],1); e = nlabcmp(lablist(J,:),lablist(nlab,:)) / m; % if the validation dataset is given elseif nargin == 3 lablistt = getlablist(t); [n,kt] = size(t); nlabt = getnlab(t); if k ~= kt error('Data sizes do not match'); end d = classp(a,nlab,h,p,t); [dmax,J] = max(d',[],1); e = nlabcmp(lablistt(J,:),lablistt(nlabt,:)) / n; endreturn%CLASSP estimate of Parzen density (if t is not specified, % a leave-one-out error estimate for a is returned)function F = classp(a,nlab,h,p,t) [m,k] = size(a); maxa = max(max(abs(a))); a = a/maxa; h = h/maxa; if nargin < 5 mt = m; else [mt,kt] = size(t); t = t/maxa; end c = max(nlab); alf=sqrt(2*pi)^k; % density normalization factor [num,n] = prmem(mt,m); % use batches to avoid excessive memory usage F = ones(mt,c); for i = 0:num-1 if i == num-1 nn = mt - num*n + n; else nn = n; end range = [i*n+1:i*n+nn]; if nargin <= 4 D = +distm(a,a(range,:)); D(i*n+1:m+1:i*n+nn*m) = inf*ones(1,nn); % set distances to itself at inf else D = +distm(a,t(range,:)); end for i=1:c I = find(nlab == i); if length(I) > 0 F(range,i) = p(i).*sum(exp(-D(I,:)*0.5./(h(i).^2)),1)'./(length(I)*alf*h(i)^k); end end end F = F + realmin; F = F ./ (sum(F')'*ones(1,c));return
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -