特征值矩阵与特征向量矩阵
矩阵A AA的维度为n×n,则矩阵A AA与特征向量v vv特征值λ \lambdaλ之间的关系是:A v = λ v Av=\lambda vAv=λv
通过计算,我们可以求取A AA的一系列特征向量组成的特征矩阵V = [ v 1 , v 2 , v 3 , . . . , v n ] V=[v_1,v_2,v_3,...,v_n]V=[v1,v2,v3,...,vn]和对应的一系列特征值组成的特征值矩阵Λ = d i a g [ λ 11 , λ 22 , . . . , λ n n ] \Lambda=diag[\lambda_{11},\lambda_{22},...,\lambda_{nn}]Λ=diag[λ11,λ22,...,λnn],则有一下关系:A = V Λ V T A=V\Lambda V^TA=VΛVT
奇异值矩阵与奇异矩阵
矩阵A AA的维度为n×m,则此时的A AA无法求解特征值和特征向量,但是可以求广义上的特征值与特征向量,这就牵涉到奇异矩阵的分解。
奇异值分解步骤如下:
- 求解A A T AA^TAAT的特征矩阵U UU,d i m ( U ) = n × n dim(U)=n×ndim(U)=n×n;
- 求解A T A A^TAATA的特征矩阵V VV,d i m ( V ) = m × m dim(V)=m×mdim(V)=m×m;
- 求出A A T AA^TAAT的特征向量对应的特征值矩阵Λ = d i a g [ λ 11 , λ 22 , . . . , λ n n ] \Lambda=diag[\lambda_{11},\lambda_{22},...,\lambda_{nn}]Λ=diag[λ11,λ22,...,λnn]
- 奇异值矩阵为Σ = d i a g [ σ 11 , σ 12 , . . . , σ n n ] \Sigma=diag[\sigma_{11},\sigma_{12},...,\sigma_{nn}]Σ=diag[σ11,σ12,...,σnn],σ i i \sigma_{ii}σii与λ i i \lambda_{ii}λii对应的关系为:σ i i = λ i i \sigma_{ii}=\sqrt{\lambda_{ii}}σii=λii。d i m ( Σ ) = n × m dim(\Sigma)=n×mdim(Σ)=n×m;
矩阵A AA与奇异矩阵U UU、V VV,奇异值矩阵Σ \SigmaΣ之间的关系为:A = U Σ V T A=U\Sigma V^TA=UΣVT
由上式得A T = V Σ U T A^T=V\Sigma U^TAT=VΣUT,则A A T = U Σ V T V Σ U T = U Σ 2 U T = U Λ U T AA^T=U\Sigma V^TV\Sigma U^T=U\Sigma^2U^T=U\Lambda U^TAAT=UΣVTVΣUT=UΣ2UT=UΛUT,即Σ 2 = Λ \Sigma^2=\LambdaΣ2=Λ,这也是步骤4的来源。
使用图像解释特征向量与特征值
我们取灰度图I II,d i m ( I ) = n × m dim(I)=n×mdim(I)=n×m,我们把I II当作矩阵A AA。
思路如下:
- 求解A AA的奇异矩阵U UU、V VV,奇异值矩阵Σ \SigmaΣ;
- 选取最大的k个奇异值σ i \sigma_iσi,以及对应的奇异向量u i , v i {u_i},{v_i}ui,vi;
- 使用挑选出来的值组成新的奇异矩阵U n × k U_{n×k}Un×k、V m × k V_{m×k}Vm×k,奇异值矩阵Σ k × k \Sigma_{k×k}Σk×k;
- 得到A n × m = U n × k Σ k × k V m × k A_{n×m}=U_{n×k}\Sigma_{k×k}V_{m×k}An×m=Un×kΣk×kVm×k
过程用python实现,代码如下:
image1 = Image.open(filepath)
image1 = image1.convert('L')
image1.show()
A = np.asarray(image1)
U,Sigma,V = np.linalg.svd(A)
k = 10
indexS = np.argsort(-Sigma)
K_index = indexS[:k]
U = U[:, K_index]
S = [[0.0 for i in range(k)] for i in range(k)]
Sigma = Sigma[K_index]
for i in range(k):
S[i][i] = Sigma[i]
V = V[K_index,:]
X = np.matmul(U,S)
A = np.matmul(X,V)
A = Image.fromarray(A)
A.show()原图:
特征图,仅使用前10个最大的特征值对应的特征矩阵:
特征图,排除前10个最大的特征值对应的特征矩阵:
你是不是一眼就看懂了特征向量的作用!!!
没有的话,但愿下面的解释可以帮助你:
矩阵较大的特征值及其对应的特征向量存储了矩阵关键整体的信息,较小的特征值及其对应的特征向量存储了矩阵细节信息。