SVD奇异值分解
2016-06-09 18:00
316 查看
矩阵的奇异值是一个数学意义上的概念,一般是由奇异值分解(Singular Value Decomposition,简称SVD分解)得到。如果要问奇异值表示什么物理意义,那么就必须考虑在不同的实际工程应用中奇异值所对应的含义。
下面先尽量避开严格的数学符号推导,直观的从一张图片出发,让我们来看看奇异值代表什么意义。
图片实际上对应着一个矩阵,矩阵的大小就是像素大小,比如这张图对应的矩阵阶数就是1103*1620,矩阵上每个元素的数值对应着像素值。我们记这个像素矩阵为A
现在我们对矩阵进行奇异值分解。直观上,奇异值分解将矩阵分解成若干个秩一矩阵之和,用公式表示就是:
A=σ1u1vT1+σ2u2vT2+⋯+σrurvTr
其中等式右边每一项前的系数σi就是奇异值,ui和vi分别表示列向量,秩一矩阵的意思是矩阵秩为1。注意到每一项uivTi都是秩为1的矩阵。我们假定奇异值满足σ1⩾σ2⩾⋯⩾σr(奇异值大于0是个重要的性质,但这里先别在意),如果不满足的话重新排列顺序即可,这无非是编号顺序的问题。
既然奇异值有从大到小排列的顺序,我们自然要问,如果只保留大的奇异值,舍去较小的奇异值,这样(1)式里的等式自然不再成立,那会得到怎样的矩阵——也就是图像?
令A=σ1u1vT1,这只保留等式右边第一项,然后作图:
结果就是完全看不清是啥……多增加几项进来:
A20=∑i=120σiuivTi,再作图
在增加几项,看看A50的图像:
得到和原图差别不大的图像。也就是说当从1不断增大时,Ak不断的逼近A。
A=σ1u1vT1+σ2u2vT2+⋯+σrurvTr
矩阵表示一个1103*1620的矩阵,需要保存个1103*1620=1786860元素的值。等式右边ui和vi分别是1103*1和1620*1的向量,每一项有1+1103+1620=2724个元素。如果我们要存储很多高清的图片,而又受限于存储空间的限制,在尽可能保证图像可被识别的精度的前提下,我们可以保留奇异值较大的若干项,舍去奇异值较小的项即可。
从上面可以看到:奇异值往往对应着矩阵中隐含的重要信息,且重要性和奇异值大小正相关。每个矩阵都可以表示为一系列秩为1的“小矩阵”之和,而奇异值则衡量了这些“小矩阵”对于的权重。
代码:
那么A矩阵将这组标准正交基映射为:{Av1,…,Avk,0,…,0},
(Avi)TAvj=λjvTivj=λjδij
即映射后的向量是两两正交的,并且λ2i=(Avi)TAvi
取单位向量ui=Avi||Avi||2=1λi−−√Avi
那么得到Avi=σiui,σi=λi−−√,0⩽i⩽k,k=Rank(A)
将{u1,u2,…,uk}标准正交基扩展成{u1,u2,…,um}Rm空间的标准正交基,在A的零空间中选取{vk+1,…,vn}使得Avi=0,i>k,并取σi=0
可得到
A[v1,…,vk|vk+1,…,vn]=[u1,…,uk|uk+1,…,um]⎛⎝⎜⎜⎜⎜⎜σ1⋱σk000⎞⎠⎟⎟⎟⎟⎟
从而得到A矩阵的分解A=UΣVT(奇异值分解),其中U是m×m标准正交矩阵,V是n×n阶正交矩阵,Σ是m×n矩阵
注意:vi是ATA的标准特征向量,称A的右奇异向量,ui是AAT的标准特征向量,称A的左奇异向量,并且ui=Avi/||Avi||2,σi≠0和vi=Aui/||Aui||2,σi≠0
以Ax=b为例,x是m维向量,b是n维向量,m,n可以相等也可以不相等,表示矩阵可以将一个向量线性变换到另一个向量,这样一个线性变换的作用可以包含旋转、缩放和投影三种类型的效应。
奇异值分解正是对线性变换这三种效应的一个析构。
A=UΣVT,U和V是两组正交单位向量,|Sigma是对角阵,表示奇异值,它表示我们找到了U和V这样两组基,A矩阵的作用是将一个向量从U这组正交基向量的空间旋转到V这组正交基向量空间,并对每个方向进行了一定的缩放,缩放因子就是各个奇异值。如果维度比大,则表示还进行了投影。可以说奇异值分解将一个矩阵原本混合在一起的三种作用效果,分解出来了。
而特征值分解其实是对旋转缩放两种效应的归并。(有投影效应的矩阵不是方阵,没有特征值)
特征值,特征向量由Ax=x得到,它表示如果一个向量v处于A的特征向量方向,那么Av对v的线性变换作用只是一个缩放。也就是说,求特征向量和特征值的过程,我们找到了这样一组基,在这组基下,矩阵的作用效果仅仅是存粹的缩放。对于实对称矩阵,特征向量正交,我们可以将特征向量式子写成A=UΛUT,这样就和奇异值分解类似了,就是A矩阵将一个向量从U这组基的空间旋转到U这组基的空间,并在每个方向进行了缩放,由于前后都是U,就是没有旋转或者理解为旋转了0度。
总结一下,特征值分解和奇异值分解都是给一个矩阵(线性变换)找一组特殊的基,特征值分解找到了特征向量这组基,在这组基下该线性变换只有缩放效果。而奇异值分解则是找到另一组基,这组基下线性变换的旋转、缩放、投影三种功能独立地展示出来了。
应用:图像处理领域:数据压缩,对图像去噪;机器学习:PCA
参考:
1. https://www.zhihu.com/question/19666954
2. http://www.ams.org/samplings/feature-column/fcarc-svd
下面先尽量避开严格的数学符号推导,直观的从一张图片出发,让我们来看看奇异值代表什么意义。
图片实际上对应着一个矩阵,矩阵的大小就是像素大小,比如这张图对应的矩阵阶数就是1103*1620,矩阵上每个元素的数值对应着像素值。我们记这个像素矩阵为A
现在我们对矩阵进行奇异值分解。直观上,奇异值分解将矩阵分解成若干个秩一矩阵之和,用公式表示就是:
A=σ1u1vT1+σ2u2vT2+⋯+σrurvTr
其中等式右边每一项前的系数σi就是奇异值,ui和vi分别表示列向量,秩一矩阵的意思是矩阵秩为1。注意到每一项uivTi都是秩为1的矩阵。我们假定奇异值满足σ1⩾σ2⩾⋯⩾σr(奇异值大于0是个重要的性质,但这里先别在意),如果不满足的话重新排列顺序即可,这无非是编号顺序的问题。
既然奇异值有从大到小排列的顺序,我们自然要问,如果只保留大的奇异值,舍去较小的奇异值,这样(1)式里的等式自然不再成立,那会得到怎样的矩阵——也就是图像?
令A=σ1u1vT1,这只保留等式右边第一项,然后作图:
结果就是完全看不清是啥……多增加几项进来:
A20=∑i=120σiuivTi,再作图
在增加几项,看看A50的图像:
得到和原图差别不大的图像。也就是说当从1不断增大时,Ak不断的逼近A。
A=σ1u1vT1+σ2u2vT2+⋯+σrurvTr
矩阵表示一个1103*1620的矩阵,需要保存个1103*1620=1786860元素的值。等式右边ui和vi分别是1103*1和1620*1的向量,每一项有1+1103+1620=2724个元素。如果我们要存储很多高清的图片,而又受限于存储空间的限制,在尽可能保证图像可被识别的精度的前提下,我们可以保留奇异值较大的若干项,舍去奇异值较小的项即可。
从上面可以看到:奇异值往往对应着矩阵中隐含的重要信息,且重要性和奇异值大小正相关。每个矩阵都可以表示为一系列秩为1的“小矩阵”之和,而奇异值则衡量了这些“小矩阵”对于的权重。
代码:
from PIL import Image from matplotlib.pylab import * import numpy as np date=np.array(Image.open(r'C:\Users\Selena\Desktop\test\test.jpg').convert('L')) U,s,V=np.linalg.svd(date,full_matrices=False) S=np.diag(s) indice=1 imshow(np.dot(U[:,0:indice],np.dot(S[0:indice,0:indice],V[0:indice,:]))) indice=20 imshow(np.dot(U[:,0:indice],np.dot(S[0:indice,0:indice],V[0:indice,:]))) indice=50 imshow(np.dot(U[:,0:indice],np.dot(S[0:indice,0:indice],V[0:indice,:])))
奇异值分解证明
假设m×n矩阵A的秩为k,{v1,v2,…,vn}为n×n阶实堆成矩阵ATA的特征向量,并且已经标准正交化,即vTivj=δij,对应的特征值为{λ1,…,λk,0,…,0}那么A矩阵将这组标准正交基映射为:{Av1,…,Avk,0,…,0},
(Avi)TAvj=λjvTivj=λjδij
即映射后的向量是两两正交的,并且λ2i=(Avi)TAvi
取单位向量ui=Avi||Avi||2=1λi−−√Avi
那么得到Avi=σiui,σi=λi−−√,0⩽i⩽k,k=Rank(A)
将{u1,u2,…,uk}标准正交基扩展成{u1,u2,…,um}Rm空间的标准正交基,在A的零空间中选取{vk+1,…,vn}使得Avi=0,i>k,并取σi=0
可得到
A[v1,…,vk|vk+1,…,vn]=[u1,…,uk|uk+1,…,um]⎛⎝⎜⎜⎜⎜⎜σ1⋱σk000⎞⎠⎟⎟⎟⎟⎟
从而得到A矩阵的分解A=UΣVT(奇异值分解),其中U是m×m标准正交矩阵,V是n×n阶正交矩阵,Σ是m×n矩阵
注意:vi是ATA的标准特征向量,称A的右奇异向量,ui是AAT的标准特征向量,称A的左奇异向量,并且ui=Avi/||Avi||2,σi≠0和vi=Aui/||Aui||2,σi≠0
算法思路
利用QR分解算AAT特征值和特征向量(持续更新)奇异值分解与特征值分解
矩阵可以认为是一种线性变换的表示,而且这种线性变换的作用效果与基的选择有关,确定了定义域空间和目标空间的两组基,就可以写出该线性变换的矩阵表示。以Ax=b为例,x是m维向量,b是n维向量,m,n可以相等也可以不相等,表示矩阵可以将一个向量线性变换到另一个向量,这样一个线性变换的作用可以包含旋转、缩放和投影三种类型的效应。
奇异值分解正是对线性变换这三种效应的一个析构。
A=UΣVT,U和V是两组正交单位向量,|Sigma是对角阵,表示奇异值,它表示我们找到了U和V这样两组基,A矩阵的作用是将一个向量从U这组正交基向量的空间旋转到V这组正交基向量空间,并对每个方向进行了一定的缩放,缩放因子就是各个奇异值。如果维度比大,则表示还进行了投影。可以说奇异值分解将一个矩阵原本混合在一起的三种作用效果,分解出来了。
而特征值分解其实是对旋转缩放两种效应的归并。(有投影效应的矩阵不是方阵,没有特征值)
特征值,特征向量由Ax=x得到,它表示如果一个向量v处于A的特征向量方向,那么Av对v的线性变换作用只是一个缩放。也就是说,求特征向量和特征值的过程,我们找到了这样一组基,在这组基下,矩阵的作用效果仅仅是存粹的缩放。对于实对称矩阵,特征向量正交,我们可以将特征向量式子写成A=UΛUT,这样就和奇异值分解类似了,就是A矩阵将一个向量从U这组基的空间旋转到U这组基的空间,并在每个方向进行了缩放,由于前后都是U,就是没有旋转或者理解为旋转了0度。
总结一下,特征值分解和奇异值分解都是给一个矩阵(线性变换)找一组特殊的基,特征值分解找到了特征向量这组基,在这组基下该线性变换只有缩放效果。而奇异值分解则是找到另一组基,这组基下线性变换的旋转、缩放、投影三种功能独立地展示出来了。
应用:图像处理领域:数据压缩,对图像去噪;机器学习:PCA
参考:
1. https://www.zhihu.com/question/19666954
2. http://www.ams.org/samplings/feature-column/fcarc-svd
相关文章推荐
- Python基础之生成器、迭代器
- MySQL数据类型的最优选择
- python 两个list 求交集,并集,差集
- AngularJs directive-transclude
- Java练习:分治法之合并排序(merge Sort)
- 78.PL和PS通过BRAM交互共享数据
- 排序算法——选择排序
- 机器学习思想
- 电商之梳理Router相关知识---路由
- android动画使用三
- 64位win7下安装Boost 1.59.0 + boost.python 1.59.0 + gccxml + pygccxml + pyplusplus(py++)
- 操作系统中常见的调度算法
- Unity_数学_点乘和叉乘的应用
- nginx日志分析工具goaccess
- 105. Set Matrix Zeroes
- 电商之梳理相关Zookeeper相关知识---HA
- 剑指offer(12)-反转链表
- HDU 1689 Just a Hook (线段树)
- SQLPLUS的 set配置(结合spool)
- MySQL 语句优化