computeVPB | R Documentation |
For a given persistence diagram D=\{(b_i,p_i)\}_{i=1}^N, computeVPB()
vectorizes the persistence block
f(x,y)=∑_{i=1}^N \bold 1_{E(b_i,p_i)}(x,y),
where E(b_i,p_i)=[b_i-\frac{λ_i}{2},b_i+\frac{λ_i}{2}]\times [p_i-\frac{λ_i}{2},p_i+\frac{λ_i}{2}] and λ_i=2τ p_i with τ\in (0,1]. Points of D with infinite persistence value are ignored
computeVPB(D, homDim, xSeq, ySeq, tau)
D |
matrix with three columns containing the dimension, birth and persistence values respectively |
homDim |
homological dimension (0 for H_0, 1 for H_1, etc.) |
xSeq |
numeric vector of increasing x (birth) values used for vectorization |
ySeq |
numeric vector of increasing y (persistence) values used for vectorization |
tau |
parameter (between 0 and 1) controlling block size. By default, |
A numeric vector whose elements are the weighted averages of the persistence block computed over each cell of the two-dimensional grid constructred from xSeq
=\{x_1,x_2,…,x_n\} and ySeq
=\{y_1,y_2,…,y_m\}:
\Big(\frac{1}{Δ x_1Δ y_1}\int_{[x_1,x_2]\times [y_1,y_2]}f(x,y)wdA,…,\frac{1}{Δ x_{n-1}Δ y_{m-1}}\int_{[x_{n-1},x_n]\times [y_{m-1},y_m]}f(x,y)wdA\Big),
where wdA=(x+y)dxdy, Δ x_k=x_{k+1}-x_k and Δ y_j=y_{j+1}-y_j
Umar Islambekov, Aleksei Luchinsky
1. Chan, K. C., Islambekov, U., Luchinsky, A., & Sanders, R. (2022). A computationally efficient framework for vector representation of persistence diagrams. Journal of Machine Learning Research 23, 1-33.
N <- 100 set.seed(123) # sample N points uniformly from unit circle and add Gaussian noise X <- TDA::circleUnif(N,r=1) + rnorm(2*N,mean = 0,sd = 0.2) # compute a persistence diagram using the Rips filtration built on top of X D <- TDA::ripsDiag(X,maxdimension = 1,maxscale = 2)$diagram # switch from the birth-death to the birth-persistence coordinates D[,3] <- D[,3] - D[,2] colnames(D)[3] <- "Persistence" # construct one-dimensional grid of scale values ySeqH0 <- unique(quantile(D[D[,1]==0,3],probs = seq(0,1,by=0.2))) tau <- 0.3 # parameter in [0,1] which controls the size of blocks around each point of the diagram # compute VPB for homological dimension H_0 computeVPB(D,homDim = 0,xSeq=NA,ySeqH0,tau) xSeqH1 <- unique(quantile(D[D[,1]==1,2],probs = seq(0,1,by=0.2))) ySeqH1 <- unique(quantile(D[D[,1]==1,3],probs = seq(0,1,by=0.2))) # compute VPB for homological dimension H_1 computeVPB(D,homDim = 1,xSeqH1,ySeqH1,tau)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.