⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 range_svdd.m

📁 模式识别工具箱,希望对大家有用!
💻 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 + -