2015
DOI: 10.1007/s10208-015-9281-9
|View full text |Cite
|
Sign up to set email alerts
|

Persistence Barcodes Versus Kolmogorov Signatures: Detecting Modes of One-Dimensional Signals

Abstract: We investigate the problem of estimating the number of modes (i.e., local maxima)-a well known question in statistical inference-and we show how to do so without presmoothing the data. To this end, we modify the ideas of persistence barcodes by first relating persistence values in dimension one to distances (with respect to the supremum norm) to the sets of functions with a given number of modes, and subsequently working with norms different from the supremum norm. As a particular case we investigate the Kolmo… Show more

Help me understand this report
View preprint versions

Search citation statements

Order By: Relevance

Paper Sections

Select...
2
2
1

Citation Types

0
6
0

Year Published

2017
2017
2024
2024

Publication Types

Select...
3
2

Relationship

0
5

Authors

Journals

citations
Cited by 5 publications
(6 citation statements)
references
References 30 publications
0
6
0
Order By: Relevance
“…The statistics toolbox is required for this script. %% Loop over PDFs for j = 1:size(X,1) %% Optimal kernel density estimate w/ knowledge of PDF opt = optimalkernelbandwidth(x,f(j,:),n(aa),kernelflag); if kernelflag > 0 pd_opt = fitdist(X(j,:)',kernelargstr,'BandWidth',opt.h); elseif kernelflag < 0 pd_opt = fitdist(X(j,:)','Kernel','Kernel',kernelargstr,... 'BandWidth',opt.h); end kde_opt = pdf(pd_opt,x); %% Numerically ISE minimizing bandwidth temp = vbise(x,f(j,:),X(j,:),kernelflag); ind = find(temp.ISE==min(temp.ISE),1,'first'); h_opt = temp.h(ind); if kernelflag > 0 pd_numopt = fitdist(X(j,:)',kernelargstr,'BandWidth',h_opt); elseif kernelflag < 0 pd_numopt = fitdist(X(j,:)','Kernel','Kernel',... kernelargstr,'BandWidth',h_opt); end kde_numopt = pdf(pd_numopt,x); %% Cross-validation KDE cv = cv1d(X(j,:)',kernelflag); if kernelflag > 0 % % For MATLAB estimator % pd = fitdist(X(j,:)',kernelargstr); pd = fitdist(X(j,:)',kernelargstr,'BandWidth',cv.h); elseif kernelflag < 0 % % For MATLAB estimator % pd = fitdist(X(j,:)','Kernel','Kernel',kernelargstr); pd = fitdist(X(j,:)','Kernel','Kernel',kernelargstr,'BandWidth',cv.h); end kde = pdf(pd,x); h_hat = pd.BandWidth; pre_c1_CV(ii,j,aa) = h_hat-h_opt; pre_c23_CV(ii,j,aa) = ise(x,f(j,:),X(j,:),h_hat,kernelflag); pre_c45_CV(ii,j,aa) = ... pre_c23_CV(ii,j,aa)-ise(x,f(j,:),X(j,:),h_opt,kernelflag); %% Topological KDE tde = tde1d(X(j,:),kernelflag); f_tde = tde.y/(sum(tde.y)*mean(diff(tde.x))); h_hat = tde.h; pre_c1_top(ii,j,aa) = h_hat-h_opt; pre_c23_top(ii,j,aa) = ise(x,f(j,:),X(j,:),h_hat,kernelflag); pre_c45_top(ii,j,aa) = ... pre_c23_top(ii,j,aa)-ise(x,f(j,:),X(j,:),h_opt,kernelflag); %% Unimodal category and number of local maxima ucat_CV(ii,j,aa) = nnz(sum(unidec(kde,0),2)>sqrt(eps)); lmax_CV(ii,j,aa) = nnz(diff(sign(diff([0,kde,0])))<0); ucat_top(ii,j,aa) = tde.mfuc; lmax_top(ii,j,aa) = nnz(diff(sign(diff([0,f_tde,0])))<0); end end end %% c1 for j = 1:6 % Normalized histogram lo = min([min(min(pre_c1_top(:,j,:))),min(min(pre_c1_CV(:,j,:)))]); hi = max([max(max(pre_c1_top(:,j,:))),max(max(pre_c1_CV(:,j,:)))]); L = linspace(lo,hi,50); for k = 1:5 % n = [25,50,100,200,500] A(:,k) = histc(squeeze(pre_c1_top(:,j,k)),L,1); B(:,k) = histc(squeeze(pre_c1_CV(:,j,k)),L,1); end eval(normmacro); % Plot subplot(3,6,j); eval(plotmacro); title(['$f_',num2str(j),'$'],'Interpreter','latex'); end subplot(3,6,1); ylabel('$\hat h -h_{opt}$','Interpreter','latex'); %% c2, c3 for j = 1:6 % Normalized histogram lo = 0; hi = max([max(max(pre_c23_top(:,j,:))),max(max(pre_c23_CV(:,j,:)))]); L = linspace(lo,hi,50); for k = 1:5 % n = [25,50,100,200,500] A(:,k) = histc(squeeze(pre_c23_top(:,j,k)),L,1); B(:,k) = histc(squeeze(pre_c23_CV(:,j,k)),L,1); end eval(normmacro); % Plot subplot (3,6,j+6); eval(plotmacro); end subplot (3,6,7); ylabel('ISE$(\hat h)$','Interpreter','latex'); %% c4, c5 for j = 1:6 % Form histograms (note logspace). NB.…”
Section: Tdeperformancedatascriptmmentioning
confidence: 99%
See 3 more Smart Citations
“…The statistics toolbox is required for this script. %% Loop over PDFs for j = 1:size(X,1) %% Optimal kernel density estimate w/ knowledge of PDF opt = optimalkernelbandwidth(x,f(j,:),n(aa),kernelflag); if kernelflag > 0 pd_opt = fitdist(X(j,:)',kernelargstr,'BandWidth',opt.h); elseif kernelflag < 0 pd_opt = fitdist(X(j,:)','Kernel','Kernel',kernelargstr,... 'BandWidth',opt.h); end kde_opt = pdf(pd_opt,x); %% Numerically ISE minimizing bandwidth temp = vbise(x,f(j,:),X(j,:),kernelflag); ind = find(temp.ISE==min(temp.ISE),1,'first'); h_opt = temp.h(ind); if kernelflag > 0 pd_numopt = fitdist(X(j,:)',kernelargstr,'BandWidth',h_opt); elseif kernelflag < 0 pd_numopt = fitdist(X(j,:)','Kernel','Kernel',... kernelargstr,'BandWidth',h_opt); end kde_numopt = pdf(pd_numopt,x); %% Cross-validation KDE cv = cv1d(X(j,:)',kernelflag); if kernelflag > 0 % % For MATLAB estimator % pd = fitdist(X(j,:)',kernelargstr); pd = fitdist(X(j,:)',kernelargstr,'BandWidth',cv.h); elseif kernelflag < 0 % % For MATLAB estimator % pd = fitdist(X(j,:)','Kernel','Kernel',kernelargstr); pd = fitdist(X(j,:)','Kernel','Kernel',kernelargstr,'BandWidth',cv.h); end kde = pdf(pd,x); h_hat = pd.BandWidth; pre_c1_CV(ii,j,aa) = h_hat-h_opt; pre_c23_CV(ii,j,aa) = ise(x,f(j,:),X(j,:),h_hat,kernelflag); pre_c45_CV(ii,j,aa) = ... pre_c23_CV(ii,j,aa)-ise(x,f(j,:),X(j,:),h_opt,kernelflag); %% Topological KDE tde = tde1d(X(j,:),kernelflag); f_tde = tde.y/(sum(tde.y)*mean(diff(tde.x))); h_hat = tde.h; pre_c1_top(ii,j,aa) = h_hat-h_opt; pre_c23_top(ii,j,aa) = ise(x,f(j,:),X(j,:),h_hat,kernelflag); pre_c45_top(ii,j,aa) = ... pre_c23_top(ii,j,aa)-ise(x,f(j,:),X(j,:),h_opt,kernelflag); %% Unimodal category and number of local maxima ucat_CV(ii,j,aa) = nnz(sum(unidec(kde,0),2)>sqrt(eps)); lmax_CV(ii,j,aa) = nnz(diff(sign(diff([0,kde,0])))<0); ucat_top(ii,j,aa) = tde.mfuc; lmax_top(ii,j,aa) = nnz(diff(sign(diff([0,f_tde,0])))<0); end end end %% c1 for j = 1:6 % Normalized histogram lo = min([min(min(pre_c1_top(:,j,:))),min(min(pre_c1_CV(:,j,:)))]); hi = max([max(max(pre_c1_top(:,j,:))),max(max(pre_c1_CV(:,j,:)))]); L = linspace(lo,hi,50); for k = 1:5 % n = [25,50,100,200,500] A(:,k) = histc(squeeze(pre_c1_top(:,j,k)),L,1); B(:,k) = histc(squeeze(pre_c1_CV(:,j,k)),L,1); end eval(normmacro); % Plot subplot(3,6,j); eval(plotmacro); title(['$f_',num2str(j),'$'],'Interpreter','latex'); end subplot(3,6,1); ylabel('$\hat h -h_{opt}$','Interpreter','latex'); %% c2, c3 for j = 1:6 % Normalized histogram lo = 0; hi = max([max(max(pre_c23_top(:,j,:))),max(max(pre_c23_CV(:,j,:)))]); L = linspace(lo,hi,50); for k = 1:5 % n = [25,50,100,200,500] A(:,k) = histc(squeeze(pre_c23_top(:,j,k)),L,1); B(:,k) = histc(squeeze(pre_c23_CV(:,j,k)),L,1); end eval(normmacro); % Plot subplot (3,6,j+6); eval(plotmacro); end subplot (3,6,7); ylabel('ISE$(\hat h)$','Interpreter','latex'); %% c4, c5 for j = 1:6 % Form histograms (note logspace). NB.…”
Section: Tdeperformancedatascriptmmentioning
confidence: 99%
“…NB. The only difference between L1 % and L2 versions is rescaling lo = -4; hi = 0.25; L = linspace(lo,hi,50); % abs turns out to not have any effect, but included for correctness for k = 1:5 % n = [25,50,100,200,500] A(:,k) = histc(squeeze(log10(abs(pre_c45_top(:,j,k)))),L,1); B(:,k) = histc(squeeze(log10(abs(pre_c45_CV(:,j,k)))),L,1); end eval(normmacro); % Plot subplot (3,6,j+12); eval(plotmacro); xlabel('$n$','Interpreter','latex'); end subplot (3,6,13); ylabel('$c_{45}$','Interpreter','latex');…”
Section: Tdeperformancedatascriptmmentioning
confidence: 99%
See 2 more Smart Citations
“…Recent work has come in the form of classification and quantification of periodicity and quasi-periodicity [34][35][36][37][38]. Other applications using TSP include wheeze detection [39], computer performance [40], market prices [41,42], sonar [43], image processing [44], mode hunting [45], ice core analysis [46], machining dynamics [47][48][49][50] and gene expression [51,52].…”
Section: Introductionmentioning
confidence: 99%