SVD 奇异值分解

文章目录

    • Vectors 向量
    • Matrices 矩阵
      • Matrix Notation 矩阵表示
    • Vector Terminology 向量术语
      • Vector Length 向量长度
      • Vector Addition 向量加法
      • Scalar Multiplication 标量乘法
      • Inner Product 内积
      • Orthogonality 正交
      • Normal Vector or Unit Vector 单位向量
      • Orthonormal Vectors
      • Gram-Schmidt Orthonormalization Process
    • Matrix Terminology 矩阵术语
      • Square Matrix 方块矩阵
      • Transpose 转置
      • Matrix Multiplication 矩阵乘法
      • Identity Matrix 单位矩阵
      • Orthogonal Matrix 正交矩阵
      • Diagonal Matrix 对角矩阵
      • Determinant 行列式
      • Eigenvectors and Eigenvalues 特征向量和特征值
    • Singular Value Decomposition(SVD)
      • Example of Full Singular Value Decomposition
      • Example of Reduced Singular Value Decomposition
    • Reference

Vectors 向量

向量通常用头上有一个箭头的小写字母表示,如 x ⃗ \vec{x} x 。构成向量的数字叫做分向量(components),分向量的数量等于向量的维度(dimensionality of the vector)。
x ⃗ = ( 8 6 7 5 3 ) \vec{x} = \left(\begin{array}{cc} 8\\ 6\\ 7\\ 5\\ 3 \end{array} \right) x =86753
上面的例子表示了一个5维的向量, x 1 = 8 , x 2 = 6 x_1=8,x_2=6 x1=8,x2=6,向量也可以水平表示来节省空间,例如 x ⃗ = [ 8 , 6 , 7 , 5 , 3 ] \vec{x}=[8, 6, 7, 5, 3] x =[8,6,7,5,3]。普遍来说,一个 n n n维向量 x ⃗ \vec{x} x 是一个 n n n个数字的序列,分向量 x i x_i xi表示在第 i i i维的 x ⃗ \vec{x} x 的值。

Matrices 矩阵

矩阵和表格很像。矩阵由行(row,横向的列表)和列(column,纵向的列表)组成。
A = [ 17 18 5 5 45 1 42 28 30 15 115 3 10 10 10 21 51 2 28 5 65 39 132 5 24 26 45 21 116 4 ] A= \left[\begin{array}{cc} 17 & 18 & 5 & 5 & 45 & 1\\ 42 & 28 & 30 & 15 & 115 & 3\\ 10 & 10 & 10 & 21 & 51 & 2\\ 28 & 5 & 65 & 39 & 132 & 5\\ 24 & 26 & 45 & 21 & 116 & 4 \end{array} \right] A=1742102824182810526530106545515213921451155113211613254
矩阵的大小(或者说维度)是由矩阵的行数和列数决定的,上面的矩阵就是一个 5 × 6 5 \times 6 5×6大小的矩阵。通常来说,矩阵用大写字母表示,例如 A A A,矩阵的行数用 m m m表示,列数用 n n n表示。矩阵的元素(entries or elements or components)表示为小写的 a a a,这个元素 a a a的位置是由它所在的行数 i i i和列数 j j j表示。举例来说,132在矩阵的第4行第5列, a 45 = 132 a_{45}=132 a45=132。在第 i i i行第 j j j列的元素表示为 a i j a_{ij} aij,叫做 i j − e n t r y ij-entry ijentry i j − c o m p n e n t ij-compnent ijcompnent

Matrix Notation 矩阵表示

m , n m,n m,n是两个大于1的整数,令 a i j , i = 1 , . . . , m , j = 1 , . . . , n a_{ij},i=1,...,m,j=1,...,n aij,i=1,...,m,j=1,...,n,由数字组成的矩阵
A = [ a 11 . . . a 1 j . . . a 1 n . . . a i 1 . . . a i j . . . a i n . . . a m 1 . . . a m j . . . a m n ] A= \left[\begin{array}{cc} a_{11} & ... & a_{1j} & ... & a_{1n}\\ . & & . & & .\\ a_{i1} & ... & a_{ij} & ... & a_{in}\\ . & & . & & .\\ a_{m1} & ... & a_{mj} & ... & a_{mn} \end{array} \right] A=a11.ai1.am1.........a1j.aij.amj.........a1n.ain.amn
是一个 m × n m\times n m×n大小的矩阵, a i j a_{i}j aij是A的元素。数字序列
A ( i ) = ( a i 1 , . . . , a ( i n ) ) A_{(i)} = (a_{i1}, ..., a_{(in)}) A(i)=(ai1,...,a(in))
是矩阵的第 i i i行,数字序列
A ( j ) = ( a 1 j , . . . , a ( m j ) ) A^{(j)} = (a_{1j}, ..., a_{(mj)}) A(j)=(a1j,...,a(mj))
是矩阵的第 j j j行。
矩阵可以看作是一些向量的集合,一个 n n n维的向量可以看作是一个 1 × n 1\times n 1×n的矩阵。

Vector Terminology 向量术语

Vector Length 向量长度

向量 v ⃗ \vec{v} v 的长度表示为 ∣ v ⃗ ∣ |\vec{v}| v 。它的计算公式为
∣ v ⃗ ∣ = ∑ i = 1 n x i 2 |\vec{v}| = \sqrt{\sum_{i=1}^{n}x_i^2} v =i=1nxi2
例如, v ⃗ = [ 4 , 11 , 8 , 10 ] \vec{v}=[4,11,8,10] v =[4,11,8,10],那么它的长度
∣ v ⃗ ∣ = 4 2 + 1 1 2 + 8 2 + 1 0 2 = 301 |\vec{v}|=\sqrt{4^2+11^2+8^2+10^2}=\sqrt{301} v =42+112+82+102 =301

Vector Addition 向量加法

将两个向量相加,就是把 v 1 ⃗ \vec{v_1} v1 里面的元素与 v 2 ⃗ \vec{v_2} v2 里相对应的元素相加,如果
A = [ a 1 , a 2 , . . . , a n ] , B = [ b 1 , b 2 , . . . , b n ] A = [a_1, a_2, ..., a_n], B=[b_1,b_2,...,b_n] A=[a1,a2,...,an],B=[b1,b2,...,bn], 那么 A + B = [ a 1 + b 1 , a 2 + b 2 , . . . , a n + b n ] A+B=[a_1+b_1, a_2+b_2, ..., a_n+b_n] A+B=[a1+b1,a2+b2,...,an+bn]

Scalar Multiplication 标量乘法

将一个标量(实数)和一个向量相乘,就是把向量里面的每个元素与这个标量相乘。如果 d d d是一个实数, v ⃗ \vec{v} v 代表一个向量 v 1 , v 2 , . . . , v n v_1, v_2, ...,v_n v1,v2,...,vn,那么 d ∗ v ⃗ = [ d v 1 , d v 2 , . . . , d v n ] d*\vec{v}=[dv_1,dv_2,...,dv_n] dv =[dv1,dv2,...,dvn]

Inner Product 内积

两个向量的内积代表将两个向量的每个对应的元素相乘然后将这些结果相加,表示为 ( v 1 ⃗ , v 2 ⃗ ) (\vec{v_1}, \vec{v_2}) (v1 ,v2 )或者 v 1 ⃗ ⋅ v 2 ⃗ \vec{v_1}\cdot\vec{v_2} v1 v2 ( v 1 ⃗ , v 2 ⃗ ) = v 1 ⃗ ⋅ v 2 ⃗ = ∑ i = 1 n x i y i (\vec{v_1}, \vec{v_2})=\vec{v_1}\cdot\vec{v_2}=\sum_{i=1}^{n}x_i y_i (v1 ,v2 )=v1 v2 =i=1nxiyi

Orthogonality 正交

如果两个向量的内积为0,那么这两个向量是正交的。

Normal Vector or Unit Vector 单位向量

向量长度为1的向量可以叫做单位向量。任何向量长度大于0的向量可以通过将每个元素除以向量长度的方法正规化(normalized)为单位向量。
例如:
v ⃗ = [ 2 , 4 , 1 , 2 ] \vec{v} = [2, 4, 1, 2] v =[2,4,1,2],那么它的长度为
∣ v ⃗ ∣ = 2 2 + 4 2 + 1 2 + 2 2 = 5 |\vec{v}|=\sqrt{2^2 + 4^2 + 1^2 + 2^2} = 5 v =22+42+12+22 =5
那么 u ⃗ = [ 2 / 5 , 4 / 5 , 1 / 5 , 1 / 5 ] \vec{u}=[2/5, 4/5, 1/5, 1/5] u =[2/5,4/5,1/5,1/5]是一个单位向量,因为
∣ u ⃗ ∣ = ( 2 / 5 ) 2 + ( 4 / 5 ) 2 + ( 1 / 5 ) 2 + ( 1 / 5 ) 2 = 1 |\vec{u}| = \sqrt{(2/5)^2 + (4/5)^2 + (1/5)^2 + (1/5)^2}=1 u =(2/5)2+(4/5)2+(1/5)2+(1/5)2 =1

Orthonormal Vectors

两个正交的单位向量叫做orthonormal。

Gram-Schmidt Orthonormalization Process

将一组向量变成互相正交的单位向量
例如
A = [ 1 2 1 0 2 0 2 3 1 1 1 0 ] A= \left[\begin{array}{cc} 1 & 2 & 1\\ 0 & 2 & 0\\ 2 & 3 & 1\\ 1 & 1 & 0 \end{array}\right] A=102122311010
转换为一组正交的单位向量
A = [ 6 6 2 6 2 3 0 2 2 3 − 1 3 6 3 0 0 6 6 − 2 6 − 2 3 ] A= \left[\begin{array}{cc} \frac{\sqrt{6}}{6} & \frac{\sqrt{2}}{6} & \frac{2}{3}\\ 0 & \frac{2\sqrt{2}}{3} & -\frac{1}{3}\\ \frac{\sqrt{6}}{3} & 0 & 0\\ \frac{\sqrt{6}}{6} & -\frac{\sqrt{2}}{6} & -\frac{2}{3} \end{array}\right] A=66 036 66 62 322 062 3231032
首先,单位化 v 1 ⃗ = [ 1 , 0 , 2 , 1 ] \vec{v_1}=[1,0,2,1] v1 =[1,0,2,1]
u 1 ⃗ = [ 1 6 , 0 , 2 6 , 1 6 ] \vec{u_1}=[\frac{1}{\sqrt{6}}, 0, \frac{2}{\sqrt{6}}, \frac{1}{\sqrt{6}}] u1 =[6 1,0,6 2,6 1]
然后,令
w 2 ⃗ = v 2 ⃗ − u 1 ⃗ ⋅ v 2 ⃗ ∗ u 1 ⃗ = [ 2 , 2 , 3 , 1 ] − [ 1 6 , 0 , 2 6 , 1 6 ] ⋅ [ 2 , 2 , 3 , 1 ] ∗ [ 1 6 , 0 , 2 6 , 1 6 ] = [ 2 , 2 , 3 , 1 ] − 9 6 ∗ [ 1 6 , 0 , 2 6 , 1 6 ] = [ 2 , 2 , 3 , 1 ] − [ 3 2 , 0 , 3 , 3 2 ] = [ 1 2 , 2 , 0 , − 1 2 ] \begin{aligned} \vec{w_2}=\vec{v_2}-\vec{u_1}\cdot\vec{v_2}*\vec{u_1}=&[2, 2, 3, 1] - [\frac{1}{\sqrt{6}}, 0, \frac{2}{\sqrt{6}}, \frac{1}{\sqrt{6}}]\cdot[2,2,3,1]*[\frac{1}{\sqrt{6}}, 0, \frac{2}{\sqrt{6}}, \frac{1}{\sqrt{6}}]\\ =&[2,2,3,1]-\frac{9}{\sqrt{6}}*[\frac{1}{\sqrt{6}}, 0, \frac{2}{\sqrt{6}}, \frac{1}{\sqrt{6}}]\\ =&[2,2,3,1]-[\frac{3}{2},0,3,\frac{3}{2}]\\ =&[\frac{1}{2}, 2, 0, -\frac{1}{2}] \end{aligned} w2 =v2 u1 v2 u1 ====[2,2,3,1][6 1,0,6 2,6 1][2,2,3,1][6 1,0,6 2,6 1][2,2,3,1]6 9[6 1,0,6 2,6 1][2,2,3,1][23,0,3,23][21,2,0,21]
w 2 ⃗ \vec{w_2} w2 正规化,得到
v 2 ⃗ = [ 2 6 , 2 2 3 , 0 , − 2 6 ] \vec{v_2}=[\frac{\sqrt{2}}{6}, \frac{2\sqrt{2}}{3}, 0, -\frac{\sqrt{2}}{6}] v2 =[62 ,322 ,0,62 ]
同理可得,
u 3 ⃗ = [ 2 3 , − 1 3 , 0 , − 2 3 ] \vec{u_3}=[\frac{2}{3}, -\frac{1}{3}, 0, -\frac{2}{3}] u3 =[32,31,0,32]
一般来说,有一组向量,那么
w k ⃗ = v k ⃗ − ∑ i = 1 k − 1 u t ⃗ ⋅ v k ⃗ ∗ u t ⃗ \vec{w_k}=\vec{v_k}-\sum_{i=1}^{k-1}\vec{u_t}\cdot\vec{v_k}*\vec{u_t} wk =vk i=1k1ut vk ut

Matrix Terminology 矩阵术语

Square Matrix 方块矩阵

如果一个矩阵的行数和列数相同,那么这个矩阵是方块矩阵。

Transpose 转置

一个矩阵的转置矩阵是通过将原本的矩阵的每个元素交换行和列来生成的。 A A A的转置矩阵表示为 A T A^T AT。例如
A = [ 1 2 3 4 5 6 ] A= \left[\begin{array}{cc} 1 & 2 & 3\\ 4 & 5 & 6 \end{array}\right] A=[142536]
那么 A A A的转置矩阵为
A T = [ 1 4 2 5 3 6 ] A^T= \left[\begin{array}{cc} 1 & 4\\ 2 & 5\\ 3 & 6 \end{array}\right] AT=123456

Matrix Multiplication 矩阵乘法

m × n m\times n m×n大小的矩阵 A A A可以和 n × s n\times s n×s大小的矩阵 B B B相乘得到 m × s m\times s m×s大小的矩阵 A B AB AB
矩阵 A B AB AB的每一个位置的值 a b i j = A i ⃗ ⋅ B j ⃗ ab_{ij}=\vec{A_i}\cdot\vec{B^j} abij=Ai Bj

Identity Matrix 单位矩阵

一个对角线为1其他都是0的方块矩阵叫做单位矩阵 I I I
A I = A AI=A AI=A

Orthogonal Matrix 正交矩阵

如果 A A T = A T A = I AA^T=A^TA=I AAT=ATA=I,那么 A A A就是正交矩阵。

Diagonal Matrix 对角矩阵

如果一个矩阵除了对角线其他都是0,只有对角线有非0值,那么这个矩阵是对角矩阵。

Determinant 行列式

A A A的行列式表示为 ∣ A ∣ |A| A det ⁡ ( A ) \det(A) det(A)
∣ A ∣ = ∣ a b c d e f g h i ∣ = a ∣ . . . . e f . h i ∣ − b ∣ . . . d . f g . i ∣ + c ∣ . . . d e . g h . ∣ = a ∣ e f h i ∣ − b ∣ d f g i ∣ + c ∣ d e g h ∣ = a e i + b f g + c d h − c e g − b d i − a f h \begin{aligned} |A|= \left|\begin{array}{cc} a & b & c\\ d & e & f\\ g & h & i \end{array}\right| =&a \left|\begin{array}{cc} . & . & .\\ . & e & f\\ . & h & i \end{array}\right| -b \left|\begin{array}{cc} . & . & .\\ d & . & f\\ g & . & i \end{array}\right| +c \left|\begin{array}{cc} . & . & .\\ d & e & .\\ g & h & . \end{array}\right| \\ =&a \left|\begin{array}{cc} e & f\\ h & i \end{array}\right| -b \left|\begin{array}{cc} d & f\\ g & i \end{array}\right| +c \left|\begin{array}{cc} d & e\\ g & h \end{array}\right|\\ =&aei+bfg+cdh-ceg-bdi-afh \end{aligned} A=adgbehcfi===a....eh.fib.dg....fi+c.dg.eh...aehfibdgfi+cdgehaei+bfg+cdhcegbdiafh

Eigenvectors and Eigenvalues 特征向量和特征值

一个能满足下列条件的非零向量叫做特征向量
A v ⃗ = λ v ⃗ A\vec{v}=\lambda\vec{v} Av =λv
其中, A A A是一个方块矩阵, λ \lambda λ是一个纯量, v ⃗ \vec{v} v 就是特征向量, λ \lambda λ叫做特征值。
例如,有一个矩阵
A = [ 2 1 1 2 ] A= \left[\begin{array}{cc} 2 & 1\\ 1 & 2 \end{array}\right] A=[2112]
那么
A v ⃗ = λ v ⃗ = [ 2 1 1 2 ] [ x 1 x 2 ] = λ [ x 1 x 2 ] A\vec{v}=\lambda\vec{v}= \left[\begin{array}{cc} 2 & 1\\ 1 & 2 \end{array}\right] \left[\begin{array}{cc} x_1\\ x_2 \end{array}\right] =\lambda \left[\begin{array}{cc} x_1\\ x_2 \end{array}\right] Av =λv =[2112][x1x2]=λ[x1x2]
所以
2 x 1 + x 2 = λ x 1 x 1 + 2 x 2 = λ x 2 2x_1+x_2=\lambda x_1\\ x_1+2x_2=\lambda x_2 2x1+x2=λx1x1+2x2=λx2
可以转变为
( 2 − λ ) x 1 + x 2 = 0 x 1 + ( 2 − λ ) x 2 = 0 (2-\lambda)x_1+x_2=0\\ x_1+(2-\lambda)x_2=0 (2λ)x1+x2=0x1+(2λ)x2=0
让向量 [ x 1 , x 2 ] [x_1,x_2] [x1,x2]非0的充分且必要条件是系数矩阵要为0,那么就有
∣ ( 2 − λ ) 1 1 ( 2 − λ ) ∣ = 0 ( 2 − λ ) ( 2 − λ ) − 1 ⋅ 1 = 0 λ 2 − 4 λ + 3 = 0 ( λ − 3 ) ( λ − 1 ) = 0 λ 1 = 3 , λ 2 = 1 \left|\begin{array}{cc} (2-\lambda) & 1\\ 1 & (2-\lambda) \end{array}\right| =0\\ (2-\lambda)(2-\lambda)-1\cdot 1=0\\ \lambda^2-4\lambda+3=0\\ (\lambda-3)(\lambda-1)=0\\ \lambda_1=3,\lambda_2=1 (2λ)11(2λ)=0(2λ)(2λ)11=0λ24λ+3=0(λ3)(λ1)=0λ1=3,λ2=1
对于 λ = 3 \lambda=3 λ=3,可得 x 1 = x 2 x_1=x_2 x1=x2,所以一种可能的特征向量为 [ 1 , 1 ] [1,1] [1,1]
对于 λ = 1 \lambda=1 λ=1,可得 x 1 = − x 2 x_1=-x_2 x1=x2,所以一种可能的特征向量为 [ 1 , − 1 ] [1,-1] [1,1]

Singular Value Decomposition(SVD)

可以从三个观点来看SVD。

  1. 可以将其看作是将一组互相关联的变量转换为一组互不相关的变量的方法,这个方法可以揭示原本数据项之间的关系。
  2. SVD可以找出变化最剧烈的数据维度,这样就可以用更少的维度来表示原始数据
  3. SVD可以看作是一种压缩数据的方法。

举个例子,下图有一堆点来表示2维的数据,这根线是这些点的最佳线性回归,用一根线(一维)来表示这些点(二维)。

这里的线是一维的个人理解是其中一项值可以用另一项表示,所以只要有一个变数就能确定数据,所以这个线是一维的。

某种意义上,这根线是这笔资料的最佳近似,因为这一条线使各个点到这条线的距离总和最小。如果我们在每个点画一个与这条线垂直的线,并且交点作为原始数据的近似值,那么就可以利用这条回归线作为原始数据的表示,压缩原始数据,并且尽可能的接近于原始数据。
SVD 奇异值分解_第1张图片
如果有这么一条与上图的线垂直的线,如下图。这条线沿着数据的第二维尽可能的捕捉了尽量多的变化,但是它在近似数据方面表现不佳,因为它表现出了较少变化的维度。
SVD 奇异值分解_第2张图片

SVD的基本思想:将高维度、高度变化的数据集压缩到低维度的空间,从而更加清晰表现原数据,并且将原市数据从高度变化到低变化排序。在NLP中大量使用SVD的原因是可以在简单的忽略某些值的情况下大量的减少数据,同时保持原来数据的主要关系。

Example of Full Singular Value Decomposition

SVD基于一个线性代数的定理,该定理表明一个矩阵 A A A可以分解为三个矩阵的乘积:

  1. 正交矩阵 U U U
  2. 对角矩阵 S S S
  3. 正交矩阵 U U U的转置矩阵 V V V

表示为
A m n = U m m S m n V n n T A_{mn}=U_{mm}S_{mn}V_{nn}^T Amn=UmmSmnVnnT
这里的 U T U = I , V T V = I U^TU=I,V^TV=I UTU=I,VTV=I U U U的列是 A A T AA^T AAT的正交特征向量, V V V的特征是 A T A A^TA ATA的正交特征向量, S S S是一个对角矩阵,包含有 U U U或者 V V V的特征值的平方根,以降序排列。
下面这个例子仅将其应用于小矩阵来计算它的SVD。
首先,有一个矩阵
A = [ 3 1 1 − 1 3 1 ] A= \left[\begin{array}{cc} 3 & 1 & 1\\ -1 & 3 & 1 \end{array}\right] A=[311311]
为了计算 U U U,得先计算 A A T AA^T AAT A T A^T AT
A T = [ 3 − 1 1 3 1 1 ] A^T= \left[\begin{array}{cc} 3 & -1\\ 1 & 3\\ 1 & 1 \end{array}\right] AT=311131
所以
A A T = [ 3 1 1 − 1 3 1 ] [ 3 − 1 1 3 1 1 ] = [ 11 1 1 11 ] AA^T= \left[\begin{array}{cc} 3 & 1 & 1\\ -1 & 3 & 1 \end{array}\right] \left[\begin{array}{cc} 3 & -1\\ 1 & 3\\ 1 & 1 \end{array}\right] =\left[\begin{array}{cc} 11 & 1\\ 1 & 11 \end{array}\right] AAT=[311311]311131=[111111]
接下来,要计算 A A T AA^T AAT的特征向量和特征值,特征向量的定义为 A v ⃗ = λ v ⃗ A\vec{v}=\lambda\vec{v} Av =λv ,带入这个公式可得
[ 11 1 1 11 ] [ x 1 x 2 ] = λ [ x 1 x 2 ] \left[\begin{array}{cc} 11 & 1\\ 1 & 11 \end{array}\right] \left[\begin{array}{cc} x_1\\ x_2 \end{array}\right]=\lambda \left[\begin{array}{cc} x_1\\ x_2 \end{array}\right] [111111][x1x2]=λ[x1x2]
重写为方程组
11 x 1 + x 2 = λ x 1 x 1 + 11 x 2 = λ x 2 11x_1+x_2 = \lambda x_1 \\ x_1+11x_2 = \lambda x_2 11x1+x2=λx1x1+11x2=λx2
重组,可得
( 11 − λ ) x 1 + x 2 = 0 x 1 + ( 11 − λ ) x 2 = 0 (11-\lambda)x_1+x_2=0\\ x_1+(11-\lambda)x_2=0 (11λ)x1+x2=0x1+(11λ)x2=0
系数矩阵的行列式为0来求解 λ \lambda λ
∣ ( 11 − λ ) 1 1 ( 11 − λ ) ∣ = 0 \left|\begin{array}{cc} (11-\lambda) & 1\\ 1 & (11-\lambda) \end{array}\right| = 0 (11λ)11(11λ)=0
求解可得 λ 1 = 10 , λ 2 = 12 \lambda_1=10, \lambda_2=12 λ1=10,λ2=12。对于 λ 1 = 10 \lambda_1=10 λ1=10来说,带入可得 x 1 = − x 2 x_1=-x_2 x1=x2,选取 [ 1 , − 1 ] [1, -1] [1,1]作为特征向量;对于 λ 2 = 12 \lambda_2=12 λ2=12来说,带入可得 x 1 = x 2 x_1=x_2 x1=x2,选取 [ 1 , 1 ] [1, 1] [1,1]作为特征向量。这两个特征向量作为列向量组成的矩阵,按相应特征值的大小排序。换句话说,特征向量大的那一个作为列1,小的那一个作为列2。
[ 1 1 1 − 1 ] \left[\begin{array}{cc} 1 & 1\\ 1 & -1 \end{array}\right] [1111]
最后,要将这个转换为一组正交的单位向量。首先正规化 v 1 ⃗ \vec{v_1} v1
u 1 ⃗ = v 1 ⃗ ∣ v 1 ⃗ ∣ = [ 1 , 1 ] 1 2 + 1 2 = [ 1 2 , 1 2 ] \vec{u_1} = \frac{\vec{v_1}}{|\vec{v_1}|} = \frac{[1,1]}{\sqrt{1^2+1^2}}= [\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}] u1 =v1 v1 =12+12 [1,1]=[2 1,2 1]
w 2 ⃗ = v 2 ⃗ − u 1 ⃗ ⋅ v 2 ⃗ ∗ u 1 ⃗ = [ 1 , − 1 ] − [ 1 2 , 1 2 ] ⋅ [ 1 , − 1 ] ∗ [ 1 2 , 1 2 ] = [ 1 , − 1 ] − 0 ∗ [ 1 2 , 1 2 ] = [ 1 , − 1 ] \begin{aligned} \vec{w_2}=&\vec{v_2}-\vec{u_1}\cdot\vec{v_2}*\vec{u_1}\\ =&[1, -1] - [\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}]\cdot[1,-1]*[\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}]\\ =&[1, -1] - 0 * [\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}]\\ =&[1, -1] \end{aligned} w2 ====v2 u1 v2 u1 [1,1][2 1,2 1][1,1][2 1,2 1][1,1]0[2 1,2 1][1,1]
正规化可得
u 2 ⃗ = w 2 ⃗ ∣ w 2 ⃗ ∣ = [ 1 2 , − 1 2 ] \vec{u_2}=\frac{\vec{w_2}}{|\vec{w_2}|} = [\frac{1}{\sqrt{2}}, -\frac{1}{\sqrt{2}}] u2 =w2 w2 =[2 1,2 1]
所以
U = [ 1 2 1 2 1 2 − 1 2 ] U= \left[\begin{array}{cc} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{array}\right] U=[2 12 12 12 1]
同理,可得
V = [ 1 6 2 5 1 30 2 6 − 1 5 2 30 1 6 0 − 5 30 ] V= \left[\begin{array}{cc} \frac{1}{\sqrt{6}} & \frac{2}{\sqrt{5}} & \frac{1}{\sqrt{30}}\\ \frac{2}{\sqrt{6}} & -\frac{1}{\sqrt{5}} & \frac{2}{\sqrt{30}}\\ \frac{1}{\sqrt{6}} & 0 & -\frac{5}{\sqrt{30}} \end{array}\right] V=6 16 26 15 25 1030 130 230 5
同时,特征值为 λ 1 = 0 , λ 2 = 10 , λ 3 = 12 \lambda_1=0, \lambda_2=10, \lambda_3=12 λ1=0,λ2=10,λ3=12
需要的是 V V V的转置矩阵
V T = [ 1 6 2 6 1 6 2 5 − 1 5 0 1 30 2 30 − 5 30 ] V^T= \left[\begin{array}{cc} \frac{1}{\sqrt{6}} & \frac{2}{\sqrt{6}}& \frac{1}{\sqrt{6}}\\ \frac{2}{\sqrt{5}} & -\frac{1}{\sqrt{5}} & 0\\ \frac{1}{\sqrt{30}} & \frac{2}{\sqrt{30}} & -\frac{5}{\sqrt{30}} \end{array}\right] VT=6 15 230 16 25 130 26 1030 5
对于 S S S来说,按大小顺序将特征值排序塞入到对角线上(这里使用 U U U或者 V V V的特征值都可以,因为总是一样)。因为这里做的是Full SVD,所以要在 S S S后面赛上0列向让它的大小为 m × n m\times n m×n U U U中的列成为左特征向量, V V V中的列称为右特征向量。
S = [ 12 0 0 0 10 0 ] S= \left[\begin{array}{cc} \sqrt{12} & 0 &0\\ 0 & \sqrt{10} & 0 \end{array}\right] S=[12 0010 00]
A m n = U m m S m n V n n T = [ 1 2 1 2 1 2 − 1 2 ] [ 12 0 0 0 10 0 ] [ 1 6 2 6 1 6 2 5 − 1 5 0 1 30 2 30 − 5 30 ] = [ 3 1 1 − 1 3 1 ] \begin{aligned} A_{mn}=U_{mm}S_{mn}V_{nn}^{T}=& \left[\begin{array}{cc} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{array}\right] \left[\begin{array}{cc} \sqrt{12} & 0 &0\\ 0 & \sqrt{10} & 0 \end{array}\right] \left[\begin{array}{cc} \frac{1}{\sqrt{6}} & \frac{2}{\sqrt{6}}& \frac{1}{\sqrt{6}}\\ \frac{2}{\sqrt{5}} & -\frac{1}{\sqrt{5}} & 0\\ \frac{1}{\sqrt{30}} & \frac{2}{\sqrt{30}} & -\frac{5}{\sqrt{30}} \end{array}\right]= \left[\begin{array}{cc} 3 & 1 & 1\\ -1 & 3 & 1 \end{array}\right] \end{aligned} Amn=UmmSmnVnnT=[2 12 12 12 1][12 0010 00]6 15 230 16 25 130 26 1030 5=[311311]

Example of Reduced Singular Value Decomposition

要把一个数据压缩到 K K K维,做法与上面相同,但是只取 V V V的前 K K K列。作为数据的压缩结果。

Reference

https://davetang.org/file/Singular_Value_Decomposition_Tutorial.pdf

你可能感兴趣的:(SVD 奇异值分解)