rsvd {rsvd} | R Documentation |
Randomized Singular Value Decomposition (rsvd).
Description
The randomized SVD computes the near-optimal low-rank approximation of a rectangular matrix using a fast probablistic algorithm.
Usage
rsvd(A, k = NULL, nu = NULL, nv = NULL, p = 10, q = 2, sdist = "normal")
Arguments
A |
array_like; |
k |
integer; |
nu |
integer, optional; |
nv |
integer, optional; |
p |
integer, optional; |
q |
integer, optional; |
sdist |
string |
Details
The singular value decomposition (SVD) plays an important role in data analysis, and scientific computing.
Given a rectangular matrix
, and a target rank
,
the SVD factors the input matrix
as
The left singular vectors are the columns of the
real or complex unitary matrix
. The
right singular vectors are the columns
of the real or complex unitary matrix
. The
dominant singular values are the
entries of
, and non-negative and real numbers.
is an oversampling parameter to improve the approximation.
A value of at least 10 is recommended, and
is set by default.
The parameter specifies the number of power (subspace) iterations
to reduce the approximation error. The power scheme is recommended,
if the singular values decay slowly. In practice, 2 or 3 iterations
achieve good results, however, computing power iterations increases the
computational costs. The power scheme is set to
by default.
If , a deterministic partial or truncated
svd
algorithm might be faster.
Value
rsvd
returns a list containing the following three components:
- d
array_like;
singular values; vector of length.
- u
array_like;
left singular vectors;or
dimensional array.
- v
array_like;
right singular vectors;or
dimensional array.
Note
The singular vectors are not unique and only defined up to sign (a constant of modulus one in the complex case). If a left singular vector has its sign changed, changing the sign of the corresponding right vector gives an equivalent decomposition.
Author(s)
N. Benjamin Erichson, erichson@berkeley.edu
References
[1] N. B. Erichson, S. Voronin, S. L. Brunton and J. N. Kutz. 2019. Randomized Matrix Decompositions Using R. Journal of Statistical Software, 89(11), 1-48. doi: 10.18637/jss.v089.i11.
[2] N. Halko, P. Martinsson, and J. Tropp. "Finding structure with randomness: probabilistic algorithms for constructing approximate matrix decompositions" (2009). (available at arXiv https://arxiv.org/abs/0909.4061).
See Also
Examples
library('rsvd')
# Create a n x n Hilbert matrix of order n,
# with entries H[i,j] = 1 / (i + j + 1).
hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }
H <- hilbert(n=50)
# Low-rank (k=10) matrix approximation using rsvd
k=10
s <- rsvd(H, k=k)
Hre <- s$u %*% diag(s$d) %*% t(s$v) # matrix approximation
print(100 * norm( H - Hre, 'F') / norm( H,'F')) # percentage error
# Compare to truncated base svd
s <- svd(H)
Hre <- s$u[,1:k] %*% diag(s$d[1:k]) %*% t(s$v[,1:k]) # matrix approximation
print(100 * norm( H - Hre, 'F') / norm( H,'F')) # percentage error