zoukankan      html  css  js  c++  java
  • 简单易学的机器学习算法—SVD奇异值分解

    简单易学的机器学习算法—SVD奇异值分解

    一、SVD奇异值分解的定义
        假设M是一个的矩阵,如果存在一个分解:

    其中的酉矩阵,的半正定对角矩阵,的共轭转置矩阵,且为的酉矩阵。这样的分解称为M的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩阵,称为右奇异矩阵。
    二、SVD奇异值分解与特征值分解的关系

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

    这里,是方阵,为单位矩阵,的特征向量,的特征向量。的特征值为M的奇异值的平方。
    三、SVD奇异值分解的作用和意义
        奇异值分解最大的作用就是数据的降维,当然,还有其他很多的作用,这里主要讨论数据的降维,对于的矩阵m,进行奇异值分解

    取其前r个非零奇异值,可以还原原来的矩阵M,即前R个非零奇异值对应的奇异向量代表了M矩阵的主要特征。可以表示为

    五、实验的仿真
        我们在手写体上做实验,原始矩阵为

    原始矩阵
    对应的图像为

    对应图像
    经过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); 

  • 相关阅读:
    HDU 6191 Query on A Tree ( 2017广西邀请赛 && 可持久化Trie )
    BZOJ 4318 OSU! ( 期望DP )
    洛谷 P2473 [SCOI2008]奖励关 ( 期望DP )
    Codeforces #499 E Border ( 裴蜀定理 )
    HDU 6444 Neko's loop ( 2018 CCPC 网络赛 && 裴蜀定理 && 线段树 )
    HDU 6438 Buy and Resell ( 2018 CCPC 网络赛 && 贪心 )
    Nowcoder Hash Function ( 拓扑排序 && 线段树优化建图 )
    Nowcoder Playing Games ( FWT 优化 DP && 博弈论 && 线性基)
    js中的深拷贝与浅拷贝
    nrm 源管理器
  • 原文地址:https://www.cnblogs.com/amengduo/p/9587144.html
Copyright © 2011-2022 走看看