How to perform Low rank (Cholesky-like) factorization, and what is it called?

436 Views Asked by At

Assuming that a symmetric positive-semi-definite square real matrix $A$ with shape $n*n$ and rank $m$ can be decomposed as $L L^T$ where $L$ is "tall and thin" with shape $n*m$, ($m<n$). How do I find $L$ when I know $m$, and what is the name of such a decomposition?.

I am looking for a way to do this in Python, using one or more numpy/scipy functions, but I can only find the standard Cholesky decomposition.

2

There are 2 best solutions below

5
On

Let $A=X^TX$, with $X$ of shape $m\times n$.

If $m>n$, the thin $QR$ decomposition of $X$ produces $X=QR$ with $Q$ of dimension $m\times n$ and $R$ of dimension $n\times n$. Then with $L=R^T$ we have

$$LL^T=R^TR=R^T(Q^TQ)R=(QR)^T(QR)=X^TX=A$$

If $m\le n$, the usual $QR$ decomposition of $X$ yields $Q$ of dimension $m\times m$ and $R$ of dimension $m\times n$, and the same relation holds.

0
On

(Trying to answer my own question).

Eigen-decomposition of $A$:

$$A_{n*n} = Q_{n*n} \Lambda_{n*n} Q^T_{n*n}$$

Since $A_{n*n}$ has rank $m$ ($m<n$) it has $n-m$ eigen-values that are zero, so removing those eigen-values leads to:

$$A_{n*n} = \hat{Q}_{n*m} \hat{\Lambda}_{m*m} \hat{Q}^T_{n*m}$$

Splitting the eigen-values:

$$A_{n*n} = \hat{Q}_{n*m} \hat{\Lambda}^{1/2}_{m*m} \hat{\Lambda}^{1/2}_{m*m} \hat{Q}^T_{n*m}$$

And defining:

$$L = \hat{Q}_{n*m} \hat{\Lambda}^{1/2}_{m*m}$$

Results in:

$$A = L L^T$$