您的位置:首页 > 其它

机器学习算法(降维)—SVD奇异值分解

2016-12-14 21:38 239 查看

一、SVD奇异值分解的定义

    假设

是一个

的矩阵,如果存在一个分解:



其中



的酉矩阵,



的半正定对角矩阵,



的共轭转置矩阵,且为

的酉矩阵。这样的分解称为

的奇异值分解,

对角线上的元素称为奇异值,

称为左奇异矩阵,

称为右奇异矩阵。

二、SVD奇异值分解与特征值分解的关系

    特征值分解与SVD奇异值分解的目的都是提取一个矩阵最重要的特征。然而,特征值分解只适用于方阵,而SVD奇异值分解适用于任意的矩阵,不一定是方阵。




 

这里,



是方阵,



为单位矩阵,



的特征向量,



的特征向量。



的特征值为

的奇异值的平方。

三、SVD奇异值分解的作用和意义

    奇异值分解最大的作用就是数据的降维,当然,还有其他很多的作用,这里主要讨论数据的降维,对于

的矩阵

,进行奇异值分解



取其前

个非零奇异值,可以还原原来的矩阵

,即前

个非零奇异值对应的奇异向量代表了矩阵

的主要特征。可以表示为



四、实验的仿真

    我们在手写体上做实验,原始矩阵为



原始矩阵
对应的图像为



对应图像
经过SVD分解后的奇异值矩阵为



部分奇异值矩阵
取前14个非零奇异值



前14个非零奇异值
还原原始矩阵B,还原后的图像为



还原后的图像
对比图像



对比图像
MATLAB代码

[plain]
view plain
copy

%% 测试奇异值分解过程  
load data.mat;%该文件是做好的一个手写体的图片  
B = zeros(28,28);%将行向量重新转换成原始的图片  
  
for i = 1:28  
    j = 28*(i-1)+1;  
    B(i,:) = A(1,j:j+27);  
end  
  
%进行奇异值分解  
[U S V] = svd(B);  
  
%选取前面14个非零奇异值  
for i = 1:14  
    for j = 1:14  
        S_1(i,j) = S(i,j);  
    end  
end  
  
%左奇异矩阵  
for i = 1:28  
    for j = 1:14  
        U_1(i,j) = U(i,j);  
    end  
end  
  
%右奇异矩阵  
for i = 1:28  
    for j = 1:14  
        V_1(i,j) = V(i,j);  
    end  
end  
  
B_1 = U_1*S_1*V_1';  
  
%同时输出两个图片  
subplot(121);imshow(B);  
subplot(122);imshow(B_1); 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: