1.奇异值分解
奇异值分解(Singular Value Decomposition,简称SVD):对于任何一个矩阵 B m × n B_{m\times n} Bm×n,存在正交矩阵 P m × m , Q n × n P_{m\times m},Q_{n\times n} Pm×m,Qn×n,使得 B = P D Q T B=PDQ^T B=PDQT。其中, D m × n D_{m\times n} Dm×n是一个只有对角元素不为零的矩阵。
矩阵 P = ( p 1 ⃗ , p 2 ⃗ , . . . , p m ⃗ ) P=(\vec{p_1},\vec{p_2},...,\vec{p_m}) P=(p1,p2,...,pm)的大小为 m × m m\times m m×m,列向量 p 1 ⃗ , p 2 ⃗ , . . . , p m ⃗ \vec{p_1},\vec{p_2},...,\vec{p_m} p1,p2,...,pm是 B B T BB^T BBT的特征向量,也被称为矩阵 B B B的左奇异向量(left singular vector)。
矩阵 Q = ( q 1 ⃗ , q 2 ⃗ , . . . , q m ⃗ ) Q=(\vec{q_1},\vec{q_2},...,\vec{q_m}) Q=(q1,q2,...,qm)的大小为 n × n n\times n n×n,列向量 q 1 ⃗ , q 2 ⃗ , . . . , q m ⃗ \vec{q_1},\vec{q_2},...,\vec{q_m} q1,q2,...,qm是 B T B B^TB BTB的特征向量,也被称为矩阵 B B B的右奇异向量(right singular vector)。
矩阵 D D D主对角线上的元素称为奇异值。
D m × n D_{m\times n} Dm×n的形式举例如下( a m m ≠ 0 a_{mm}\neq 0 amm=0):
[ a 11 0 0 0 0 0 a 22 0 0 0 0 0 a 33 0 0 ] \begin{bmatrix} a_{11} & 0 & 0 & 0 & 0 \\ 0 & a_{22} & 0 & 0 & 0 \\ 0 & 0 & a_{33} & 0 & 0 \end{bmatrix} a11000a22000a33000000
2.如何计算SVD
- 计算 B B T BB^T BBT和 B T B B^TB BTB。
- 分别计算 B B T BB^T BBT和 B T B B^TB BTB的特征向量及其特征值。
- B B T BB^T BBT的特征向量组成 P P P;而 B T B B^TB BTB的特征向量组成 Q Q Q。
- 对 B B T BB^T BBT和 B T B B^TB BTB的非零特征值求平方根,对应上述特征向量的位置,填入 D D D的对角元。
举个例子,假设我们有矩阵 B B B:
B = [ 1 1 1 1 0 0 ] B=\begin{bmatrix} 1 & 1 \\ 1 & 1 \\ 0 & 0 \\ \end{bmatrix} B= 110110
计算 B B T BB^T BBT:
B B T = [ 1 1 1 1 0 0 ] [ 1 1 0 1 1 0 ] = [ 2 2 0 2 2 0 0 0 0 ] BB^T=\begin{bmatrix} 1 & 1 \\ 1 & 1 \\ 0 & 0 \\ \end{bmatrix} \begin{bmatrix} 1 & 1 & 0 \\ 1 & 1 & 0 \\ \end{bmatrix}=\begin{bmatrix} 2 & 2 & 0 \\ 2 & 2 & 0 \\ 0 & 0 & 0 \\ \end{bmatrix} BBT= 110110 [111100]= 220220000
对其进行特征分解,分别得到特征值 λ 1 , λ 2 , λ 3 \lambda_1,\lambda_2,\lambda_3 λ1,λ2,λ3及其特征向量 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3:
λ 1 = 4 ; x 1 = [ 1 2 1 2 0 ] \lambda _1 =4;x_1=\begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \\ 0 \\ \end{bmatrix} λ1=4;x1= 21210
λ 2 = 0 ; x 2 = [ − 1 2 1 2 0 ] \lambda _2 =0;x_2=\begin{bmatrix} -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \\ 0 \\ \end{bmatrix} λ2=0;x2= −21210
λ 3 = 0 ; x 3 = [ 0 0 1 ] \lambda _3 =0;x_3=\begin{bmatrix} 0 \\ 0 \\ 1 \\ \end{bmatrix} λ3=0;x3= 001
特征向量 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3组合起来得到 P P P:
P = [ 1 2 − 1 2 0 1 2 1 2 0 0 0 1 ] P=\begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} P= 21210−21210001
计算 B T B B^TB BTB:
B T B = [ 1 1 0 1 1 0 ] [ 1 1 1 1 0 0 ] = [ 2 2 2 2 ] B^TB=\begin{bmatrix} 1 & 1 & 0 \\ 1 & 1 & 0 \\ \end{bmatrix} \begin{bmatrix} 1 & 1 \\ 1 & 1 \\ 0 & 0 \\ \end{bmatrix} =\begin{bmatrix} 2 & 2 \\ 2 & 2 \\ \end{bmatrix} BTB=[111100] 110110 =[2222]
同样的对其进行特征分解,得到特征值 λ 1 , λ 2 \lambda_1,\lambda_2 λ1,λ2和特征向量 x 1 , x 2 x_1,x_2 x1,x2:
λ 1 = 4 ; x 1 = [ 1 2 1 2 ] \lambda_1=4;x_1=\begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \\ \end{bmatrix} λ1=4;x1=[2121]
λ 2 = 0 ; x 2 = [ − 1 2 1 2 ] \lambda_2=0;x_2=\begin{bmatrix} -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \\ \end{bmatrix} λ2=0;x2=[−2121]
特征向量 x 1 , x 2 x_1,x_2 x1,x2组合起来得到 Q Q Q:
Q = [ 1 2 − 1 2 1 2 1 2 ] Q=\begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \end{bmatrix} Q=[2121−2121]
将矩阵 B B T BB^T BBT或矩阵 B T B B^TB BTB的非零特征值从大到小排列后开根号填入 D D D的对角元:
D = [ 2 0 0 0 0 0 ] D=\begin{bmatrix} 2 & 0 \\ 0 & 0 \\ 0 & 0 \\ \end{bmatrix} D= 200000
最终得到 B B B的奇异值分解:
B = P D Q T = [ 1 2 − 1 2 0 1 2 1 2 0 0 0 1 ] [ 2 0 0 0 0 0 ] [ 1 2 − 1 2 1 2 1 2 ] T = [ 1 1 1 1 0 0 ] B=PDQ^T=\begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} 2 & 0 \\ 0 & 0 \\ 0 & 0 \\ \end{bmatrix} \begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \end{bmatrix}^T = \begin{bmatrix} 1 & 1 \\ 1 & 1 \\ 0 & 0 \\ \end{bmatrix} B=PDQT= 21210−21210001 200000 [2121−2121]T= 110110
3.SVD的应用
SVD通常用于以下领域:
- PCA。
- 推荐系统。
- 图像压缩。
- 潜在语义索引(Lstent Semantic Indexing, LSI)。
4.参考资料
想要获取最新文章推送或者私聊谈人生,请关注我的个人微信公众号:⬇️x-jeff的AI工坊⬇️
个人博客网站:https://shichaoxin.com
GitHub:https://github.com/x-jeff