· SVD简单介绍
在很多情况下,数据的绝大部分信息往往集中在很小一部分数据上,我们知道线性代数中有很多矩阵的分解技术可以将矩阵表示成易于处理或是表达简化的形式。最常见的一就种是SVD(Singular Value Decomposition)算法。
SVD将数据分解成三个矩阵U,S,VT,这里得到的S是一个对角阵,其中对角元素为奇异值,它代表着矩阵的重要特征,从左上角到右下角重要程度递减。因为奇异值往往对应着矩阵中隐含的重要信息,而且奇异值大小与重要性正相关。
优点:简化数据,优化数据的表达形式。
缺点:难于计算。
关于奇异值分解的定义和相关推导,推荐参考这篇文章,介绍的非常清晰易懂:机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
故公式什么的这里就不列出了,理解了理论后,我们来小小测试一下,以体会其强大之处。
· matlab测试图像SVD
这里使用的是matlab函数svd():[U,S,V]=svd(A);
SVD的matlab测试代码如下:
clear,clc;
close all;
img = double(imread('room1.tif')); %[256,256]
figure(1);
subplot(331);imshow(img,[]);title('original');
[m,n] = size(img);
%返回与img同大小的对角矩阵S,两个酉矩阵U和V,且满足img=U*S*V'
[U,S,V] = svd(img);
%若img大小为m×n,则U为m×m矩阵,V为n×n矩阵.S为m×n矩阵,奇异值在S的对角线上
decomp = U(:,:)*S(:,1)*V(:,