矩阵分解SVD

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/winycg/article/details/83005881

矩阵的秩

对于一个 M × N M \times N 的矩阵A,其秩R(A)为线性无关的行向量(列向量)的数量。在空间中,秩表示矩阵的行向量或列向量所张成的空间的维度。
比如有矩阵并化为行最简矩阵: [ 1 2 1 2 2 3 0 1 1 1 5 7 ] [ 1 0 3 4 0 1 2 3 0 0 0 0 ] \begin{bmatrix} 1 &2 &1 & -2\\ 2& 3& 0& -1\\ 1& -1& -5&7 \end{bmatrix} \sim \begin{bmatrix} 1 &0 &-3 & 4\\ 0& 1& 2& -3\\ 0& 0& 0&0 \end{bmatrix}
所以上述的矩阵秩为2,表示矩阵中的所有向量都可以由 [ 1 0 0 ] \begin{bmatrix} 1\\ 0\\ 0 \end{bmatrix} [ 0 1 0 ] \begin{bmatrix} 0\\ 1\\ 0 \end{bmatrix} 线性表示,相当于矩阵张成了二维的空间。
对于 [ 1 1 0 2 1 1 0 2 ] \begin{bmatrix} 1 &1 &0 & 2\\ -1& -1& 0& -2\\ \end{bmatrix} ,按行看,行向量在4维空间中关于原点对称;从列来看,列向量在2维空间中4个点位于同一条直线。所以该矩阵只张成了一个1维的空间,所以秩为1,列向量都可以由 [ 1 1 ] \begin{bmatrix} 1 \\ -1\\ \end{bmatrix} 线性表示。
(1)行秩等于列秩,所以矩阵的秩不会超过行向量或列向量的行数和列数,所以有关系: R ( A ) min ( M , N ) R(A)\leq \min(M,N)
(2) R ( A B ) min ( R ( A ) , R ( B ) ) R(AB)\leq \min(R(A),R(B))
两个不同秩的矩阵相乘,得到的矩阵的秩不会超过两者秩的最小值。
比如: [ 1 0 0 0 ] [ 1 0 0 0 1 0 ] = [ 1 0 0 0 0 0 ] \begin{bmatrix} 1 &0 \\ 0& 0\\ \end{bmatrix}\begin{bmatrix} 1 &0&0\\ 0& 1&0\\ \end{bmatrix}=\begin{bmatrix} 1 &0 &0 \\ 0& 0& 0\\ \end{bmatrix}
因为多余的维度会被乘0而消失,当然秩也不一定会等于 min ( R ( A ) , R ( B ) ) \min(R(A),R(B)) ,因为可能相乘的时候有数的位置不一定对应有数的位置,导致都变为0,使得秩下降。

特征值和奇异值

参考链接:https://blog.csdn.net/qq_36653505/article/details/82052593
特征值: 针对的是 n n 阶方阵。设A是n阶方阵,如果存在 λ 和n维非零向量x,使 A x = λ x Ax=\lambda x ,则 λ 称为方阵A的一个特征值,x为方阵A对应于或属于特征值 λ 的一个特征向量。从定义上来看,对特征向量 x x 进行 A A 变换实质上是对 x x 进行缩放,缩放因子为 λ \lambda ,所以 x x 的方向也不变。一个变换方阵的所有特征向量组成了这个变换矩阵的一组基。N个特征向量就是N个标准正交基,而特征值的模则代表矩阵在每个基上的投影长度( A cos < A , x > = A x x = A x ||A||\cos<A,x>=\frac{Ax}{||x||}=Ax )。特征值越大,说明矩阵在对应的特征向量上的方差越大,功率越大,信息量越多。特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,所有向量组内的其他的向量都可以由特征向量线性组合得到。
奇异值:
特征值及特征值分解都是针对方阵而言,但是大多数矩阵都不是方阵,奇异值相当于方阵中的特征值,奇异值分解相当于方阵中的特征值分解。此时将 A A 与其转置相乘 A T A A^{T}A 将会得到一个方阵,再求特征值。

SVD分解

MIT公开课视频:http://open.163.com/movie/2010/11/1/G/M6V0BQC4M_M6V2B5R1G.html
参考博客:https://blog.csdn.net/u010099080/article/details/68060274
SVD(singular value decompsition),描述:
输入:矩阵 D M × N = ( x 1 , x 2 , . . . , x n ) , x i R M D_{M\times N}=(\rm \mathbf{{x}_{1},x_{2},...,x_{n}),x_{i}}\in R^{M}
D = k = 1 p σ k u k v k T = U M × M Σ M × N V N × N T D=\sum_{k=1}^{p}\sigma_{k} \rm \mathbf {u_{k} v_{k}^{T}}=U_{M\times M}\Sigma_{M\times N} V^{T}_{N\times N}
其中 Σ \Sigma 为对角矩阵,对角线上的值为矩阵 D M × N D_{M\times N} 特征值的平方根(eigenvalues),也就是奇异值(singular values),表示此维度的方差。 u k v k T \rm \mathbf {u_{k} 和v_{k}^{T}} σ k \sigma_{k} 对应的左奇异向量(left-singular vectors)和右奇异向量(left-singular vectors)。其中 U V U和V 均为正交阵(列向量都是单位向量且两两正交(垂直))。
SVD的求解:
U U 的列由 A A T AA^{T} 的单位化过的特征向量构成
V V 的列由 A T A A^{T}A 的单位化过的特征向量构成
Σ \Sigma 的对角元素来源于 A A T AA^{T} A T A A^{T}A 的平方根,从大到小排序选取 min ( M , N ) \min{(M,N)} 个特征值的平方根作为对角线。。
对于矩阵 D = [ 2 4 1 3 0 0 0 0 ] D=\begin{bmatrix} 2 & 4 \\ 1 & 3 \\ 0 & 0 \\ 0 & 0 \end{bmatrix} ,对应的SVD分解为:
在这里插入图片描述
python实现:

import numpy as np
A = np.array([[2, 4], [1, 3], [0, 0], [0, 0]])
print(np.linalg.svd(A))

左特征向量 U U 的意义:
U U 的每一列对应一个方向(成分),不同列对应的方向相互垂直。
Σ \Sigma 中的特征值从大到小排序,同时 U ( V ) U(和V) 中的列 u k ( v k ) \rm \mathbf {u_{k} (和行v_{k})} 也会相应调整。其中 u 1 \rm \mathbf {u_{1}} 代表方差最大的方向, u 2 \rm \mathbf {u_{2}} 代表与 u 1 \rm \mathbf {u_{1}} 垂直的方差最大的方向, u 3 \rm \mathbf {u_{3}} 代表与 u 1 \rm \mathbf {u_{1}} u 2 \rm \mathbf {u_{2}} 垂直的方差最大的方向。
在这里插入图片描述
以词项-文档关联矩阵为例,矩阵D:每一个文档由所有的M个单词进行表示,每一个维度表示此单词是否在文档中出现。
在这里插入图片描述
u i \rm \mathbf {u_{i}} 为M维向量,M维中的每一维表示一个单词。 u 1 , u 2 , . . . , u R \rm \mathbf {u_{1}},\rm \mathbf {u_{2}},...,\rm \mathbf {u_{R}} 组成了一个R维的空间,所有单词在坐标系上张成了一个空间, u 1 \rm \mathbf {u_{1}} 表示方差最大的方向。
右特征向量 V \rm \mathbf {V} 意义:
从另一种角度看矩阵D,每一个单词可由N个文档表示,每一个维度表示是否出现该单词。 v i \rm \mathbf {v_{i}} 为N维向量,N维中的每个维度表示一个文档。 v 1 \rm \mathbf {v_{1}} 表示所有文档向量张成的空间中,方差最大的方向。

猜你喜欢

转载自blog.csdn.net/winycg/article/details/83005881