• 简单易学的机器学习算法—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); 

  • 相关阅读:
    go语言从零学起(三) -- chat实现的思考
    go语言从零学起(二)--list循环删除元素(转载)
    go语言从零学起(一) -- 文档教程篇
    Spring框架事务支持模型的优势
    Thymeleaf
    社保到底是多交好,还是少交好?
    使用静态工厂方法而不是构造器
    EJB、RMI、XMLRPC、Hessian、Thrift 、Protobuf
    MySQL存储过程
    MySQL常用功能语句分类总结
  • 原文地址:https://www.cnblogs.com/amengduo/p/9587144.html
Copyright © 2020-2023  润新知