如何让奇异值分解(SVD)变得不“奇异”?-红色石头的个人博客
对称矩阵
A的转置=A
Hermite矩阵
厄米特矩阵(Hermitian Matrix,又译作“埃尔米特矩阵”或“厄米矩阵”),指的是自共轭矩阵。矩阵中每一个第i行第j列的元素都与第j行第i列的元素的共轭相等。埃尔米特矩阵主对角线上的元素都是实数的,其特征值也是实数。
定义1 矩阵A是Hermite矩阵,若
Hermite矩阵是自共轭矩阵,即矩阵中元素满足 aij=aji¯ 。这要求Hermite矩阵的对角元素必须是实数。
定理1 Hermite矩阵A的特征值都是实数
定理2 Hermite矩阵A任意两个不同特征值所对应的特征向量正交
正交矩阵
酉矩阵
正规矩阵
A∗A=AA∗,A 乘以自己的共轭转置(A∗) 等于 (A∗) 乘以自己,A是方块阵
正定矩阵
特征值与特征向量的几何意义:
特征向量与特征值的几何意义_Σίσυφος1900的博客-CSDN博客
特征值分解——EVD
一、普通方阵的矩阵分解(EVD)
如果一个矩阵 A 是方阵,即行列维度相同(mxm),一般来说可以对 A 进行特征分解:
其中,U 的列向量是 A 的特征向量,Λ 是对角矩阵,Λ 对角元素是对应特征向量的特征值。
举个简单的例子,例如方阵 A 为:
特征向量都是单位矩阵,相互之间是线性无关的,但是并不正交。得出的结论是对于任意方阵,不同特征值对应的特征向量必然线性无关,但是不一定正交。
>> A
A =
2 2
1 2
>> % 开始计算A矩阵的特征向量 、特征值 、 对角矩阵
>> a=eig(A) % 计算特征值
a =
3.4142
0.5858
>> % 计算特征向量和 对角矩阵
>> [U,M]=eig(A)
U =
0.8165 -0.8165
0.5774 0.5774
M =
3.4142 0
0 0.5858
>> U1=inv(U)
U1 =
0.6124 0.8660
-0.6124 0.8660
>> % U1=inv(U) 是计算U矩阵的逆
>> Ut=U.'
Ut =
0.8165 0.5774
-0.8165 0.5774
>> % Ut=U.' 是矩阵U的转置
做个验证:
>>
>> K=U*M*U1
K =
2.0000 2.0000
1.0000 2.0000
2.对称矩阵的矩阵分解(EVD)
如果方阵 A 是对称矩阵,例如:
对称矩阵特征分解满足以下公式:
>> A=[2 1,1 1]
A =
2 1 1 1
>> A=[2 1 ;1 1 ]
A =
2 1
1 1
>> r=eig(A)
r =
0.3820
2.6180
>> [X,M]=eig(A)
X =
0.5257 -0.8507
-0.8507 -0.5257
M =
0.3820 0
0 2.6180
>> Xt=X.' % 计算X矩阵的装置
Xt =
0.5257 -0.8507
-0.8507 -0.5257
>> S=X*M*Ut
函数或变量 'Ut' 无法识别。
是不是想输入:
>> S=X*M*Xt
S =
2.0000 1.0000
1.0000 1.0000
注意,我们发现对阵矩阵的分解和非对称矩阵的分解除了公式不同之外,特征向量也有不同的特性。对称矩阵的不同特征值对应的特征向量不仅线性无关,而且是相互正交的。什么是正交呢?就是特征向量内积为零。验证如下:
0.85065081 * -0.52573111 + 0.52573111 * 0.85065081 =0
重点来了,对称矩阵 A 经过矩阵分解之后,可以写成以下形式:
对上式进行验证:
这种分解形式非常有用,待会红色石头即将介绍。
二 、奇异值分解(SVD)
假设矩阵 A 的维度为 mxn,虽然 A 不是方阵,但是下面的矩阵却是方阵,且维度分别为 mxm、nxn
因此,我们就可以分别对上面的方阵进行分解:
其中,Λ1 和 Λ2 是对角矩阵,且对角线上非零元素均相同,即两个方阵具有相同的非零特征值,特征值令为 σ1, σ2, … , σk。值得注意的是,k<=m 且 k<=n。
根据 σ1, σ2, … , σk 就可以得到矩阵 A 的特征值为:
接下来,我们就能够得到奇异值分解的公式:
其中,P 称为左奇异矩阵,维度是 mxm,Q 称为右奇异矩阵,维度是 nxn。Λ 并不是方阵,其维度为 mxn,Λ 对角线上的非零元素就是 A 的特征值 λ1, λ2, … , λk。图形化表示奇异值分解如下图所示:
举个简单的例子来说明,令 A 为 3×2 的矩阵:
则有:
计算得到特征向量 P 和对应的特征值 σ 为:
>> A =[1 2;1 1 ;0 0]
A =
1 2
1 1
0 0
>> At=A.'
At =
1 1 0
2 1 0
>> K=A*At % K =A*At
K =
5 3 0
3 2 0
0 0 0
>> R1=eig(K)
R1 =
0
0.1459
6.8541
>> [X1,M1]=eig(A)
错误使用 eig
输入矩阵必须为方阵。
>> [X1,M1]=eig(K)
X1 =
0 0.5257 -0.8507
0 -0.8507 -0.5257
1.0000 0 0
M1 =
0 0 0
0 0.1459 0
0 0 6.8541
>>
然后,有:
因为第三个特征值是0,所以
’
计算得到特征向量 Q 和对应的特征值 σ 为:
>> K2=At*A
K2 =
2 3
3 5
>> [X2,M2]=eig(K2)
X2 =
-0.8507 0.5257
0.5257 0.8507
M2 =
0.1459 0
0 6.8541
>>
矩阵A的转置和A一样
则我们看可以得到 A 的特征值为:
最后,整合矩阵相乘结果,满足奇异值分解公式。
奇异值分解可以写成以下和的形式:
其中,p1 和 q1 分别为左奇异矩阵和右奇异矩阵的特征向量。
案例1:
>> A=[0 1;1 1;1 0]
A =
0 1
1 1
1 0
>> At=A.'
At =
0 1 1
1 1 0
>> a=eig(A)
错误使用 eig
输入矩阵必须为方阵。
>> K1=At*A
K1 =
2 1
1 2
>> K2A*At
函数或变量 'K2A' 无法识别。
>> K2=A*At
K2 =
1 1 0
1 2 1
0 1 1
>> % 以上分别结算出了矩阵的乘积
>> e1=eig(K1)
e1 =
1
3
>> e2=eig(K2)
e2 =
0.0000
1.0000
3.0000
>> [X1`,M1]=eig(K1)
[X1`,M1]=eig(K1)
↑
错误: 文本字符无效。请检查不受支持的符号、不可见的字符或非 ASCII 字符的粘贴。
>> [X1,M1]=eig(K1)
X1 =
-0.7071 0.7071
0.7071 0.7071
M1 =
1 0
0 3
>> [X2,M2]=eig(K2)
X2 =
0.5774 -0.7071 0.4082
-0.5774 -0.0000 0.8165
0.5774 0.7071 0.4082
M2 =
0.0000 0 0
0 1.0000 0
0 0 3.0000
奇异值分解(SVD)的定义、证明、求法(矩阵分解——3. 奇异值分解(SVD)) - 知乎
案例2
A =
1 0 1
0 1 1
0 0 0
>> det(A)
ans =
0
>> eig(A)
ans =
1
1
0
>> svd(A)
ans =
1.7321
1.0000
0
>> [s,v,d]=svd(A)
s =
0.7071 -0.7071 0
0.7071 0.7071 0
0 0 1.0000
v =
1.7321 0 0
0 1.0000 0
0 0 0
d =
0.4082 -0.7071 0.5774
0.4082 0.7071 0.5774
0.8165 0.0000 -0.5774
>> s*v*d
ans =
0.2113 -1.3660 0.2989
0.7887 -0.3660 1.1154
0 0 0
>> s*v*d'
ans =
1.0000 0 1.0000
0.0000 1.0000 1.0000
0 0 0
>>
矩阵分解(Matrix Decomposition) - 知乎