Ensembles of K-Subspaces method exploits multiple runs of K-Subspace Clustering and
uses consensus framework to aggregate multiple clustering results
to mitigate the effect of random initializations. When the results are merged,
it zeros out \(n-q\) number of values in a co-occurrence matrix. The paper
suggests to use large number of runs (B) where each run may not require
large number of iterations (iter) since the main assumption of the
algorithm is to utilize multiple partially-correct information. At the extreme case,
iteration iter may be set to 0 for which the paper denotes it as EKSS-0.
EKSS(data, k = 2, d = 2, q = floor(nrow(data) * 0.75), B = 500, iter = 0)
| data | an \((n\times p)\) matrix of row-stacked observations. |
|---|---|
| k | the number of clusters (default: 2). |
| d | candidate dimension for each subspace (default: 2). |
| q | threshold; the number of smaller values to be zeroed out (default: 0.75*\(n\)). |
| B | the number of ensembles/runs (default: 500). |
| iter | the number of iteration for each run (default: 0). |
a named list of S3 class T4cluster containing
a length-\(n\) vector of class labels (from \(1:k\)).
name of the algorithm.
Lipor J, Hong D, Tan YS, Balzano L (2021). “Subspace Clustering Using Ensembles of \(K\)-Subspaces.” arXiv:1709.04744.
# \donttest{ ## generate a toy example set.seed(10) tester = genLP(n=100, nl=2, np=1, iso.var=0.1) data = tester$data label = tester$class ## do PCA for data reduction proj = base::eigen(stats::cov(data))$vectors[,1:2] dat2 = data%*%proj ## run EKSS algorithm with k=2,3,4 with EKSS-0 and 5 iterations out2zero = EKSS(data, k=2) out3zero = EKSS(data, k=3) out4zero = EKSS(data, k=4) out2iter = EKSS(data, k=2, iter=5) out3iter = EKSS(data, k=3, iter=5) out4iter = EKSS(data, k=4, iter=5) ## extract label information lab2zero = out2zero$cluster lab3zero = out3zero$cluster lab4zero = out4zero$cluster lab2iter = out2iter$cluster lab3iter = out3iter$cluster lab4iter = out4iter$cluster ## visualize opar <- par(no.readonly=TRUE) par(mfrow=c(2,3)) plot(dat2, pch=19, cex=0.9, col=lab2zero, main="EKSS-0:K=2") plot(dat2, pch=19, cex=0.9, col=lab3zero, main="EKSS-0:K=3") plot(dat2, pch=19, cex=0.9, col=lab4zero, main="EKSS-0:K=4") plot(dat2, pch=19, cex=0.9, col=lab2iter, main="EKSS iter:K=2") plot(dat2, pch=19, cex=0.9, col=lab3iter, main="EKSS iter:K=3") plot(dat2, pch=19, cex=0.9, col=lab4iter, main="EKSS iter:K=4")