PCA and TruncatedSVD scikit-learn implementations seem to be exactly the same algorithm.
No: PCA is (truncated) SVD on centered data (by per-feature mean substraction). If the data is already centered, those two classes will do the same.
In practice TruncatedSVD
is useful on large sparse datasets which cannot be centered without making the memory usage explode.
numpy.linalg.svd
andscipy.linalg.svd
both rely on LAPACK _GESDD described here: http://www.netlib.org/lapack/lug/node32.html (divide and conquer driver)scipy.sparse.linalg.svds
relies on ARPACK to do a eigen value decomposition of XT . X or X . X.T (depending on the shape of the data) via the Arnoldi iteration method. The HTML user guide of ARPACK (used by scikit-learn via scipy.sparse.linalg) has has a broken formatting which hides the computational details but the Arnoldi iteration is well described on wikipedia: https://en.wikipedia.org/wiki/Arnoldi_iteration
Here is the code for the ARPACK-based SVD in scipy:
https://github.com/scipy/scipy/blob/master/scipy/sparse/linalg/eigen/arpack/arpack.py#L1642 (search for the string for "def svds" in case of line change in the source code).