zoukankan      html  css  js  c++  java
  • svd自我学习

    svd(singular value decomposition) 奇异值分解  2015-05-17 16:28:50

    图和部分内容来自:http://blog.csdn.net/wangzhiqing3/article/details/7446444 和 http://blog.chinaunix.net/uid-20761674-id-4040274.html 和 http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html[图(1) (2) (3) (4) (5) (6)]

    奇异值分解(以下皆以svd代表)有很多前人的帖子,看过许多,但经常忘记,因此自己写一篇帖子,加深记忆。而且自己写的东西,将来翻看也更容易些。

    SVD是矩阵的一种求解方法,区别于特征值分解只能分解方阵,SVD可以分解任意的矩阵。SVD可以用来求解PCA(主成分分析)和LSI等具体问题。

    • (1)特征值分解
    • (2)奇异值分解

    (1)特征值分解

    如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式:

    Av = λv

    这个时候, λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是如下:

    A=Q∑Q-1

    其中Q是这个矩阵A的特征向量组成的矩阵,∑对角线上的每一个值是一个特征值,它是对角阵。

    线性代数或者矩阵分解中,矩阵其实可以看作一个线性变换,一个矩阵乘以一个向量后,会形成新的向量,新的向量就是原向量经过线性变换后得到的。

    如 (1),它对应的线性变换是如下形式:

    (2)

    因为M是对称矩阵,因此这个变换是对称的,即只是对目的向量在x和y这两个方向进行拉伸变换,当M非对称时,(3),它所描述的变化变为:

    (4)

    (2)奇异值分解,奇异值分解是一个能适用于任意矩阵的一种分解方法:

    A = U∑VT

    假设A是一个M*N的矩阵,那么得到的U是一个M*M的矩阵(里面的向量正交,U中向量称为左奇异向量),∑是一个N*M矩阵(对角线之外都为零,对角线上的元素称为奇异值),VT(V的转置)是一N*N的矩阵(里面向量也正交,V中向量称为右奇异向量),如下图:

    (5)

    那么奇异值如何与特征值对应?通过构建AT*A为方阵,求这一方阵的特征值可以得到:

    (AT*A)viivi

    这里得到的v,即右奇异向量,此外,还有:

    σi=(λi1/2

    ui=(1/σi)Avi

    这里的σ为奇异值,u为左奇异向量。∑中奇异值从大到小排列,和特征值分解相同,且σ下降很快。多数情况下,前面有限个奇异值之和占了所有奇异值之和的99%,因此可以选r(r<<m&r<<n),用前r大的奇异值来近似描述矩阵。

    Am*n ≈ Um*rr*rVr*n

    (6)

  • 相关阅读:
    2019暑假中山纪中集训游记
    pytest入门学习(1)
    学习makefile与autoconfig笔记,持续更新
    新手安装 hadoop、hive和hbase 笔记
    新装ubuntu 12.04 , 使用技巧
    JDK1.7 和 jetty配置教程
    python成长之路一
    IDM下载神器
    测试
    Hadoop命令
  • 原文地址:https://www.cnblogs.com/shuren/p/4510029.html
Copyright © 2011-2022 走看看