zoukankan      html  css  js  c++  java
  • 线性代数笔记31——奇异值分解

      原文 | https://mp.weixin.qq.com/s/HrN8vno4obF_ey0ifCEvQw

      奇异值分解(Singular value decomposition)简称SVD,是将矩阵分解为特征值和特征向量的另一种方法。奇异值分解可以将一个比较复杂的矩阵用更小更简单的几个子矩阵相乘来表示,这些小矩阵描述的都是矩阵的重要的特性。奇异值分解在图形降噪、推荐系统中都有很重要的应用。

      对于任意矩阵A,都可以奇异值分解成下面的形式,其中UV是正交矩阵,Σ是对角矩阵:

      如果A是正定矩阵,它的奇异值分解就是A=QΛQT,即用一个正交矩阵Q就可以使正定矩阵A进行奇异值分解,不需要两个。对于可对角化的矩阵来说,A=SΛS-1,但这种形式下的特征向量矩阵S并不是正交矩阵,而SVD要求UV都是正交矩阵。

    奇异值分解的目标

      A是m×n的矩阵,四个基本子空间的正交性可以用下图表示,其中r是矩阵的秩:

      可以把矩阵A看作一种线性变换操作,将其行空间中的每一个向量v,变换为列空间的向量u,即u=Av。类似地,我们也可以在行空间中找到一组正交基,通过矩阵A线性变换成列空间中的另一组正交基:

      行空间中的一组正交基可以通过格拉姆-施密特正交化得到——任意一组基都可以通过格拉姆-施密特正交化变成一组正交基,但是随便一组正交基经过矩阵A的线性变换后的向量却未必正交,因此这组满足要求的正交基非常特殊,它们需要满足:

      更进一步,在V中寻找标准正交向量,并使U中的向量标准化,从而使UV标准正交:

      其中viui都是单位向量,σiui的倍数,称为奇异值。上式就是奇异值分解的目标:寻找行空间的一组标准正交基,通过A变成列空间的一组标准正交基。

      由于V中的向量的都是正交向量,因此VVT=I

      这正是奇异值分解的形式。如果A是正定矩阵,AQ=,它的奇异值分解就是A=QΛQT,此时U=V=QΣ=Λ

    如何分解

      我们已经知道奇异值分解的目标是A=UΣV­T,现在的问题是怎样找到合适的正交矩阵UV

      考虑首先解决UV中的一个,先将U消去:

      注意到ATA是一个对称方阵,并且符合正定矩阵正交分解的形式,V就是ATA的标准化后的特征向量,σi2就是ATA的特征值,σi取特征值的正平方根。

    正交向量的方向问题

      ,求A的奇异值分解。

      目标是A=UΣVT,先求解V

      计算特征值和特征向量:

      将特征向量标准化:

      现在我们有了下面的式子:

      通过上式可以进一步求得U。但是我们打算用和求V同样的方式求得U

      好了,现在验证一下奇异值分解的结果:

      这个结果并不等于A。问题出在哪呢?

      我们注意到,如果U的一个向量反向,U中的两个向量仍然是正交向量,且此时可以完成奇异值分解:

      这是因为在奇异值分解的过程中,一旦确认了V中向量的方向之后,U中向量的方向也一起被限定了,而在本例中,我们用一种和V无关的方式求得了U,而这种方法并不一定总是有效,需要尝试改变向量的方向。通过将V代入AV=求得U,可以避免这个问题。

    奇异矩阵的奇异值分解

      奇异矩阵A也可以进行奇异值分解。,求奇异矩阵A的奇异值分解。

      

      A是秩1矩阵。容易看出A的行空间的基是1=(4, 3),行空间是一维的,与之垂直的向量在零空间上,2=(3, -4)。相应地,A的列空间也是一维的,它的基是1=(1, 2),与之垂直的向量在左零空间上,2=(2, -1)。将上面的4个向量标准化,得到4个新的向量:

      接下来通过AAT的特征向量求得Σ

      

      AAT也是一个秩1矩阵,因此可确定一个特征值是0,通过矩阵的迹可确定另一个特征值是125,由此得到了Σ

     

    长方矩阵的奇异值分解

      长方矩阵也可以进行奇异值分解。

      虽然A是一个3×2的长方矩阵,但这并不影响奇异值分解。

      可以看出AA­T的3个特征值是5,0,0,3个特征向量标准正交向量:

      注意此时奇异值矩阵是3×2的矩阵,它的尺寸和A一致(通过A­TA只能求得2个特征值):

      同样的方法可以求得U。最终:


      出处:微信公众号 "我是8位的"

      本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途! 

      扫描二维码关注作者公众号“我是8位的”

  • 相关阅读:
    半同步/半反应堆线程池
    各种排序算法总结
    【面试题】求连续子数组的最大和(三种解法)
    数据结构查找、插入、删除时间复杂度
    红黑树
    opencv 图像基本操作
    plotroc.m
    roc.m
    perfcurve.m
    637. Average of Levels in Binary Tree
  • 原文地址:https://www.cnblogs.com/bigmonkey/p/12017796.html
Copyright © 2011-2022 走看看