标签:
#从特征值分解引入
我们知道矩阵的特征值分解是提取矩阵特征的一个方法,
其中v是一个一维矩阵,λ是特征值,代表v表示的矩阵特征的重要性。
但矩阵的特征值分解有一个局限性,在于变换的矩阵必须是方阵。
现实世界中大部分矩阵都不是方阵,这时如果我们想描述矩阵的特征,就要用到奇异值分解。
假设A是一个N * M的矩阵,那么得到的U是一个N * N的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个N * M的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V’(V的转置)是一个N * N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量),从图片来反映几个相乘的矩阵的大小可得下面的图片
其中,Σ中对角线上的每个元素就是奇异值,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解:
r是一个远小于m、n的数,如此
右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于n,则相乘的结果越接近于A。
这是一张美女照片
像素为高度450*宽度333。
我们都知道,图片实际上对应着一个矩阵,矩阵的大小就是像素大小,比如这张图对应的矩阵阶数就是450*333,矩阵上每个元素的数值对应着像素值。
我们对该像素矩阵进行奇异值分解会得到形如上图公式的结果,
如果我们令上面图形中的r为1,即只取结果中第一个(同时也是最大的,奇异值分解的结果中只,在Σ矩阵的对角线上,奇异值是按大小排列的),会得到下图
结果原图根本看不清,如果我们增大r的值,使r为5,会得到下图
继续增加,使r为20
这时就比较清楚了,如果使r为50,基本就和原图看不出差别了
该像素矩阵表示一张照片,如果全部保存的话,需要 450*333=149850
个元素的值,如果我们要存储很多高清的图片,而又受限于存储空间的限制,在尽可能保证图像可被识别的精度的前提下,我们可以保留奇异值较大的若干项,舍去奇异值较小的项即可。例如在上面的例子中,如果我们只保留奇异值分解的前50项,和存储原始矩阵相比,存储量仅为后者的26%。
奇异值分解不仅可以用作数据压缩,也可以用作数据去噪,比如下面这样图片
相对于白色和黑色的格子,白色夹杂的灰色格子即为噪声。
通过奇异值分解,我们发现矩阵的奇异值从大到小分别为:14.15,4.67,3.00,0.21,……,0.05。除了前3个奇异值较大以外,其余奇异值相比之下都很小。强行令这些小奇异值为0,然后只用前3个奇异值构造新的矩阵,得到
可以看到噪声明显减少了。
其实,这也是我看奇异值分解的初衷,当你得到的数据样本比较大,数据矩阵元素数量太大时,可以通过奇异值分解,只取排在前列,值比较大的奇异值,提取其中的主要特征,来减少运算量。同时也可以当样本数据中存在噪声时,同时强制使奇异值较小的为0来进行数据去噪。
标签:
原文地址:http://blog.csdn.net/pwiling/article/details/51227506