📄 range_svdd.m
字号:
function sigma = range_svdd(a,frac_rej,frac_err)% RANGE_SVDD compute SVDD over a range of sigma's.%% sigma = range_svdd(A,frac_rej,frac_err)%% The SVDD is optimized for a complete range of frac_rej by trying a% range of sigma's in the Gaussian kernel and matching a good sigma% with each frac_rej. This routine is internally used in dd_roc for% speed-up.%% see also dd_roc% Copyright: D. Tax, R.P.W. Duin, davidt@ph.tn.tudelft.nl% Faculty of Applied Physics, Delft University of Technology% P.O. Box 5046, 2600 GA Delft, The Netherlandsif (nargin<3) frac_err = 0;endif (length(frac_rej)==1) warning('Please use range_svdd for a VECTOR of frac_rej.');end% number of steps over the sigma rangenrs = 40;% find the range of useful distance in the dataD = distm(+a);maxD = sqrt(max(max(D)));%D = D + maxD*eye(size(D,1));I = find(D==0); D(I) = maxD;minD = sqrt(min(min(D)));% find a range of sigmas:step_s = (log(maxD) - log(minD))/(nrs-1);list_s = exp(log(minD):step_s:log(maxD));% set up variables:[nlab,lablist,m,k,c] = dataset(a);laba = -ones(m,1); laba(find_target(a)) = 1;%laba = nlab; laba(nlab>1) = -1;svdd_rej = zeros(nrs,1);% loop over the sigma:alf = [];Da = +distm(a);for s=1:nrs% [frac_SV2,alf,R2,I] = f_svs(list_s(s),Da,laba,frac_err); [frac_SV2,alf,R2,I] = new_f_svs(list_s(s),+a,laba,frac_err); svdd_rej(s) = sqrt(frac_SV2); if (svdd_rej(s)<min(frac_rej)) % stop increasing s: not necessary svdd_rej = svdd_rej(1:s); break; endend%[list_s(1:s)' svdd_rej]% now we have to find the final value(s) for the given fracsv's,% interpolate if necessarynrsigma = length(frac_rej);sigma = zeros(nrsigma,1);for s=1:nrsigma I = find(svdd_rej<=frac_rej(s)); if isempty(I) % all solutions are bad [mins,Imin] = min(svdd_rej); sigma(s) = list_s(Imin); else% [I svdd_rej(I) list_s(I)'] if ((length(I)==1)|(I(1)<2)) % in the beginning sigma(s) = list_s(I(1)); else % somewhere in between: interpolate I = I(1); sigma(s) = list_s(I-1) + ... (frac_rej(s)-svdd_rej(I-1))*(list_s(I)-list_s(I-1))/... (svdd_rej(I)-svdd_rej(I-1)); end endendreturn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -