Skip to content
Randomized Matrix Decompositions using R
Branch: master
Clone or download
Latest commit f30a5af Nov 6, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
R Avoid densification of input matrix in rsvd(). Oct 23, 2018
data Handwritten digits Sep 12, 2017
man
tests/testthat fixes for v1.0.0 Nov 5, 2018
.travis.yml
DESCRIPTION fixes for v1.0.0 Nov 5, 2018
NAMESPACE Avoid densification of input matrix in rsvd(). Oct 23, 2018
README.md new in version Nov 5, 2018
rsvd.png updates Mar 27, 2018

README.md

Build Status CRAN_Status_Badge

Fast Randomized Singular Value Decomposition using R

Randomized singular value decomposition (rsvd) is a fast probabilistic algorithm that can be used to compute the near optimal low-rank singular value decomposition of massive data sets with high accuracy. The key idea is to compute a compressed representation of the data to capture the essential information. This compressed representation can then be used to obtain the low-rank singular value decomposition decomposition. The rsvd package provides one of the fastest routines for low-rank matrix approximations in R, as far as we know.
The computational advantage becomes pronounced with an increasing matrix dimension (here target-rank k=50):

speed

The singular value decomposition plays a central role in data analysis and scientific computing. The SVD is also widely used for computing (randomized) principal component analysis (PCA), a linear dimensionality reduction technique. Randomized PCA (rpca) uses the approximated singular value decomposition to compute the most significant principal components. This package also includes a function to compute (randomized) robust principal component analysis (RPCA). In addition several plot functions are provided. See for further details: “Randomized Matrix Decompositions using R”.

SVD example: Image compression

library(rsvd)
data(tiger)

# Image compression using randomized SVD
s <- rsvd(tiger, k=150)
tiger.re = s$u %*% diag(s$d) %*% t(s$v) # reconstruct image

# Display orginal and reconstrucuted image
par(mfrow=c(1,2))
image(tiger, col = gray((0:255)/255))
image(tiger.re, col = gray((0:255)/255))

Here are the results: tiger

and the speedup gained over the base SVD function:

library(microbenchmark)

timing_svd <- microbenchmark(
  'SVD' = svd(tiger, nu=150, nv=150),
  'rSVD' = rsvd(tiger, k=150),
  times=50)

print(timing_svd, unit='s')

timing

Installation

Install the rsvd package via CRAN

install.packages("rsvd")

You can also install the development version from GitHub using devtools:

devtools::install_github("erichson/rsvd")

The source packge can be obtained here: CRAN: rsvd.

New in Version 1.0.0

  • Support for non-default matrix types to deal with large-scale matrices that are held on file, added by Aaron Lun.
  • Fixed a bug which occured runninig rpca with k=1 and retx=TRUE, discovered by Will.

References

You can’t perform that action at this time.