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); 

  • 相关阅读:
    剑指offer(45)扑克牌顺子
    剑指offer(44)单词翻转序列
    剑指offer(43)左旋转字符串
    剑指offer(42)和为S的字符串
    剑指offer(41)和为S的连续正数序列
    剑指offer(40)数组中只出现一次的数字
    剑指offer(39)平衡二叉树
    面试金典——字符串压缩
    LeetCode——恢复二叉搜索树
    LeetCode——修剪二叉搜索树
  • 原文地址:https://www.cnblogs.com/amengduo/p/9587145.html
Copyright © 2011-2022 走看看