Robust Principal Component Analysis
Given a data matrix M, it finds a decomposition
\textrm{min}~\|L\|_*+λ \|S\|_1\quad \textrm{s.t.}\quad L+S=M
where \|L\|_* represents a nuclear norm for a matrix L and \|S\|_1 = ∑ |S_{i,j}|, and λ a balancing/regularization parameter. The choice of such norms leads to impose low-rank property for L and sparsity on S.
admm.rpca( M, lambda = 1/sqrt(max(nrow(M), ncol(M))), mu = 1, tol = 1e-07, maxiter = 1000 )
M |
an (m\times n) data matrix |
lambda |
a regularization parameter |
mu |
an augmented Lagrangian parameter |
tol |
relative tolerance stopping criterion |
maxiter |
maximum number of iterations |
a named list containing
an (m\times n) low-rank matrix
an (m\times n) sparse matrix
dataframe recording iteration numerics. See the section for more details.
For RPCA implementation, we chose a very simple stopping criterion
\|M-(L_k+S_k)\|_F ≤ tol*\|M\|_F
for each iteration step k. So for this method, we provide a vector of only relative errors,
relative error computed
Candès EJ, Li X, Ma Y, Wright J (2011). “Robust principal component analysis?” Journal of the ACM, 58(3), 1–37. ISSN 00045411, doi: 10.1145/1970392.1970395.
## generate data matrix from standard normal X = matrix(rnorm(20*5),nrow=5) ## try different regularization values out1 = admm.rpca(X, lambda=0.01) out2 = admm.rpca(X, lambda=0.1) out3 = admm.rpca(X, lambda=1) ## visualize sparsity opar <- par(no.readonly=TRUE) par(mfrow=c(1,3)) image(out1$S, main="lambda=0.01") image(out2$S, main="lambda=0.1") image(out3$S, main="lambda=1") par(opar)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.