矩阵的svd分解通俗解释,矩阵svd分解 数学例题
矩阵相关术语共轭矩阵(Hermite矩阵)特征值相似矩阵a h a h a酉矩阵酉偏置(正交偏置)奇异值分解类型特征分解奇异值分解python代码实现验证结果np.linalg.svd svd利用Python通过SVD分解进行图像压缩
矩阵相关术语共轭矩阵(埃尔米特矩阵)
当A=(ai,J)是一个复矩阵时,用A OVERLINE A表示A的共轭复数,记住A OVERLINE A=(A I J OVERLINE { AIJ } AIJ),那么A OVERLINE A是A的共轭矩阵
Hermite矩阵关于其主对角线以复共轭方式对称,Hermite矩阵主对角线上的元素必须是实数。实对称矩阵是埃尔米特矩阵的特例。比如:
特征值定义:设A为n阶方阵。如果有一个数和一个非零的n维列向量X,使得Ax=x成立,那么是矩阵A的一个特征值,X是特征值对应的矩阵A的特征向量。
Ax=x也可以写成(A-E)X=0。它是n个未知方程的齐次线性系统,有非零解当且仅当系数行列式 A-E=0。系数行列式A-E称为A的特征多项式。
n阶方阵A=(aij)的所有特征根是1,2,…,n(包括重根):
如果是可逆矩阵A的特征根,X是对应的特征向量,那么1/是A的逆的特征根,X仍然是对应的特征向量。如果是方阵A的特征根,X是对应的特征向量,那么的m次幂是A的m次幂的特征根,X还是对应的特征向量。设1,2,…,m为方阵a的不同特征值,Xj为属于i的特征向量(i=1,2,…,m),则x1,x2,…,xm线性无关,即不同特征值的特征向量线性无关。特征值和特征向量的求解用 A-E=0,特征值根的维数一般是一维的。即k(为基本解系)。如果根是重复的,维数就是特征根的重数。k11 k22 …的相似矩阵假设为A,两个B都是N阶矩阵。如果存在可逆矩阵P,使得P(-1)AP=B,则称B为A的相似矩阵,矩阵A与B相似,记为A ~。
性质自反性:A~ A对称性:若A~ B,则B~ A传递性:若A~ B,B~ C,则A~ C若A~ B,则r(A)=r(B),A=B,tr(A)=tr(B),两个Ah代表A的共轭转置(A是复矩阵)(取每个元素的共轭,转置整个矩阵)。
如果a是实矩阵,
AH = AT
。属性xH AH=(Ax)H AHA
定理:矩阵Am,n,R(A) = r,则AHA与AAH的特征值都是非负实数,所以其所有特征的算术平方根为矩阵A的奇异值。
证明x是n阶矩阵AHA对应于特征值的特征向量,可得AHAx=x,
XHAHAx=xHx is (Ax,Ax)=(x,x)
因为(Ax,ax)=0且(x,x)=0,所以特征值=0。
mn矩阵A的奇异值个数等于列数N(因为AHA的阶数为N)且A的非零奇异值个数等于rankA(因为rank(AHA)=rank(A))。酉矩阵定义:若N阶复矩阵A满足AHA=AAH=E,则称A为酉矩阵。与实矩阵相比,酉矩阵等价于正交矩阵,ATA=AAT=E
性质AH=a1(酉矩阵)A=1行列式为1。充分条件是矩阵A的n列向量是成对正交的单位向量。酉偏置(正交偏置)定理:酉偏置矩阵具有相同的奇异值。
证明矩阵Am,N和Bm,N,若有M阶酉矩阵U和N阶酉矩阵V,则A=UBVH。当UH=U-1,VH=V-1时,我们可以得到:
AHA=vbhuhuubvh=V(BHB)V-1
因此,AHA和BHB是相似的矩阵,即它们具有相同的特征值。所以a和b有相同的奇异值。
什么是酉偏置?矩阵Am,n和矩阵Bm,n,如果存在m阶酉矩阵u和n阶酉矩阵v,使得A=UBVH,那么矩阵A和b称为酉矩阵。
奇异值奇异值是矩阵中的一个概念,一般通过奇异值分解定理得到。设A为m*n阶矩阵,q=min(m,n),A*A的q个非负特征值的算术平方根称为A的奇异值。
奇异值分解矩阵Am,N,秩(A)=r,则有M阶酉矩阵U和N阶酉矩阵V,这样:
其中=Diag ( 1, 2,…,r), 1 2 … r > 0,i(i=1,2,…,r)为矩阵a的正奇异值。
A的奇异值由A唯一确定,但酉矩阵U和V一般不唯一,所以矩阵A的奇异值分解一般不唯一。
方阵A的特征分解获得特征值和特征值对应的特征向量可以将方阵A分解为:
证明了方阵A有n个线性无关的特征向量v1,v2,v3,…,vn,对应的特征值为1,2,3,…,n,使得V=(v1,v2,v3,…,vn)
在进行特征分解时,V的这n个特征向量一般是标准化的,即V中的n个特征向量是标准的正交基,满足:
VT=V-1,VTV=I
所以方阵A的特征分解公式为:
奇异值分解矩阵的特征分解要求矩阵必须是方阵,那么可以用SVD来分解不是方阵的矩阵。假设A是一个m * n矩阵,有一个分解使得:
u是左奇异值矩阵,是矩阵A的奇异值,除了主对角线上的元素都是0,V是右奇异值矩阵。
求右奇异值矩阵虽然矩阵A不是方阵,但ATA是n * n方阵,所以ATA的特征值和特征向量的计算如下:
ATA=vVT
公式的v就是SVD公式中的v矩阵。
类似于求左奇异值矩阵,SVD中的U矩阵可以通过计算AAT方阵的特征值和特征向量得到。
AAT = (UVT)(UVT)T = UVTVTUT = U2UT
可以看出,AA T的特征向量就是SVD中的U矩阵。
求奇异值说明ATA的特征向量是SVD中的V矩阵,特征值矩阵等于奇异值矩阵的平方。也就是说,特征值和奇异值有如下关系:
Python代码实现
求右奇异值矩阵导入numpy为NPA=np.array ([[1,0,1],[0,1,1],[0,0,0]],dtype=NP . float)NP . set _ print options(precision=4,suppress=true) w,V=NP . linalg . eight(a . t . dot(a))# w特征值,V特征向量w _ index=np.argsort (w) [:-1] #返回下标w=np.sort (w)
[ 0.7071, -0.7071, 0.],
[ 0.5774, 0.5774, -0.5774]])
求左奇异值矩阵w,u=NP . linalg . eight(a . dot(a . t))# w特征值,v特征向量w _ index=np.argsort (w) [:-1] #逆序返回下标w=np.sort (w) [:-1]。
[ 0.7071, 0.7071, 0.],
[ 0. 0. 1.]])
求奇异值矩阵w,u=NP . linalg . eight(a . dot(a . t))# w特征值,v特征向量w _ index=np.argsort (w) [:-1] #逆序返回下标w=np.sort (w) [:-1]。
[0. 1. 0.],
[0. 0. 0.]])
结果是NP。利纳格。SVD NP。利纳格。SVD (a)(数组([[0.7071,-0.7071,0.0]),
[ 0.7071, 0.7071, 0.],
[ 0. 0. 1.]]),
数组([ 1.7321,1。 -0.]),
数组([[ 0.4082,0.4082,0.8165),
[-0.7071, 0.7071, 0.],
[ 0.5774, 0.5774, -0.5774]]))
利用计算机编程语言进行德拉贡诺夫狙击步枪(斯奈佩尔斯卡娅维尼奥夫卡德拉古诺夫的缩写)分解对图像压缩从PIL导入映像导入matplotlib。py绘图为pltA=图像。打开( 01。jpg , r) #(510,320,3)a=np.array(A)#图片有RGB三原色组成,所以有三个矩阵u_r,sigma_r,v_r=np.linalg.svd(a[:0]) #奇异值分解(510,510)、(320)、(320,320)u_g,sigma_g,v_g=np.linalg.svd(a[:1])u_b,sigma_b,v_b=np.linalg.svd(a[:2])def restore(sigma,u,v,K): #奇异值、左特征向量、右特征向量m=len(u) #高n=len(v[0]) #宽a=np.zeros((m,n)) #510,320对于范围(K)中的K:uk=u[:k].整形(m,1) #取矩阵U的第k 1列数据(510,) 转为(510,1) vk=v[k].整形(1,n) #取矩阵V转置的第k 1行数据(320,)转为(1,320) a=sigma[k] * np.dot(uk,vk) #前第k 1个奇异值,且k * U * V a=a.clip(0,255)返回rint(a ).astype(uint8)#仅使用前一个,2个,50个奇异值的结果K=20j=1 PLT。fig(figsize=(15,8))对于范围(1,K ^ 1,2)中的K:R=restore(sigma _ R,u_r,v_r,k) G=restore(sigma_g,u_g,v_g,k) B=restore(sigma_b,u_b,v_b,k) I=np.stack((R,G,B),axis=2) #将矩阵叠合在一起,生成图像I=图像。来自数组(I)PLT。subplot(2,5,j) plt.imshow(i) plt.title(K={} ).format(k)) j=1plt.show()