首先推荐一篇博客,奇异值分解(SVD)原理详解及推导 - CSDN博客,讲解的很清楚。这里我谈谈自己的理解,方便以后回顾。

  如果把向量理解为空间中的一个元素,那么矩阵可以理解为两个空间上的映射。在线性代数中我们常见的是正交变换,这种变换不会改变向量之间的夹角,可以用坐标系的平移旋转来直观理解。但是对一般的方阵,甚至对更一般的非对称矩阵,这种变化的几何含义又该怎么理解,一直都没有搞清楚。通过奇异值分解能说明这些变化 的实际含义。

  首先我们来看一般的方阵\(M(n*n)\),可以找到一对向量\(x_1,x_2\),在变换前后都是正交的。很明显M的特征向量正好具有这样的性质。至于特征向量有多少则要看矩阵的M的秩。我们设置M的秩为\(k(k<n)\),那么就可以找到k个特征向量\((x_1,x_2,...,x_k)\),采用Gram_Smit方法可以将这k个正交基增广为n个正交基,即n维空间中的一组基底X。然后对空间中任意向量\(\vec{a}\)用X来表示:\(\vec{a}=\{a_1\vec{x_1}+a_2\vec{x_2}+...+a_n\vec{x_n}\}\),然后我们看一下\(Ma\)的分解:

\(Ma=\{x_1,x_2,...,x_n\}*\begin{bmatrix}\lambda_1&&&&&&\\&\lambda_2&&&&&\\&&\ddots&&&&\\&&&\lambda_k&&&\\&&&&0&&\\&&&&&\ddots&\\&&&&&&0\end{bmatrix}*\begin{bmatrix}x_1^T\\x_2^T\\\vdots\\x_n^T\end{bmatrix}*(a_1x_1+a_2x_2+...+a_nx_n)\)

其中\(x_i^Tx_j=\begin{cases}1\text{ if }i=j \\\ 0\text{ if }i\neq j \end{cases}\)

\(Ma=\{x_1,x_2,...,x_n\}*\begin{bmatrix}\lambda_1&&&&&&\\&\lambda_2&&&&&\\&&\ddots&&&&\\&&&\lambda_k&&&\\&&&&0&&\\&&&&&\ddots&\\&&&&&&0\end{bmatrix}*\begin{bmatrix}a_1\\a_2\\\vdots\\a_n\end{bmatrix}\)

\(Ma=\{x_1,x_2,...,x_n\}*\begin{bmatrix}\lambda_1a_1&&&&&&\\&\lambda_2a_2&&&&&\\&&\ddots&&&&\\&&&\lambda_ka_k&&&\\&&&&0&&\\&&&&&\ddots&\\&&&&&&0\end{bmatrix}\)

\(Ma=\lambda_1a_1x_1+\lambda_2a_2x_2+...+\lambda_ka_kx_k\)

从中我们可以看出这种不满秩的方阵所对应的几何变换就是原始向量在特征向量上的分量缩放之后再重组,至于与特征向量垂直的分量直接舍弃了。

大家要注意这里就是一种SVD分解,而不是特征值分解,因为秩小于维度的方阵奇异,不能做特征值分解。但特征值分解也可以看做是满秩的特殊SVD分解,也就是不舍弃任何一个维度上的信息。至于更一般的SVD分解,即矩阵非对称,其含义也是相似的,只不过此时的左奇异矩阵和右奇异矩阵不是对称关系,而且右奇异矩阵中的特征向量是\(M^TM\)的特征向量增广之后的结果,而左奇异矩阵中的特征向量是\(MM^T\)中的特征向量增广之后的。

虽然一般的SVD分解复杂,但本质也是将原空间的向量在特征向量方向上伸缩变换后重组,同时舍弃与特征向量垂直部分的分量。

如果换个角度去想,为什么不满秩的矩阵不可逆,因为非满秩矩阵在变换的过程中丢失了原本的一部分信息,不可逆也是必然的。

这就是我对SVD的理解,也是我第一次用markdown来写博客,感觉挺方便的,特别是对公式的书写。

对SVD奇异值分解的理解的更多相关文章

  1. SVD奇异值分解的基本原理和运用

    SVD奇异值分解: SVD是一种可靠的正交矩阵分解法.可以把A矩阵分解成U,∑,VT三个矩阵相乘的形式.(Svd(A)=[U*∑*VT],A不必是方阵,U,VT必定是正交阵,S是对角阵<以奇异值 ...

  2. SVD奇异值分解的几何物理意义资料汇总

    学习SVD奇异值分解的网上资料汇总: 1. 关于svd的一篇概念文,这篇文章也是后续几篇文章的鼻祖~ http://www.ams.org/samplings/feature-column/fcarc ...

  3. [机器学习]-SVD奇异值分解的基本原理和运用

    SVD奇异值分解: SVD是一种可靠的正交矩阵分解法.可以把A矩阵分解成U,∑,VT三个矩阵相乘的形式.(Svd(A)=[U*∑*VT],A不必是方阵,U,VT必定是正交阵,S是对角阵<以奇异值 ...

  4. 『科学计算_理论』SVD奇异值分解

    转载请声明出处 SVD奇异值分解概述 SVD不仅是一个数学问题,在工程应用中的很多地方都有它的身影,比如前面讲的PCA,掌握了SVD原理后再去看PCA那是相当简单的,在推荐系统方面,SVD更是名声大噪 ...

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

    简单易学的机器学习算法-SVD奇异值分解 一.SVD奇异值分解的定义     假设M是一个的矩阵,如果存在一个分解: 其中的酉矩阵,的半正定对角矩阵,的共轭转置矩阵,且为的酉矩阵.这样的分解称为M的奇 ...

  6. 关于奇异值分解(SVD)的理解

    奇异值分解实际上是将一个矩阵,分解成为两个不同维度(行数和列数)上的正交向量集之间的映射变换,奇异值则是变换时的缩放! 例如上面的矩阵M就是一个5维映射到4维的变换矩阵,而SVD分解得到的奇异值和奇异 ...

  7. SVD分解的理解[转载]

    http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...

  8. Deep Learning基础--SVD奇异值分解

    矩阵奇异值的物理意义是什么?如何更好地理解奇异值分解?下面我们用图片的例子来扼要分析. 矩阵的奇异值是一个数学意义上的概念,一般是由奇异值分解(Singular Value Decomposition ...

  9. SVD分解的理解

    对称阵A 相应的,其对应的映射也分解为三个映射.现在假设有x向量,用A将其变换到A的列空间中,那么首先由U'先对x做变换: 由于正交阵“ U的逆=U‘ ”,对于两个空间来讲,新空间下的“ 基E' 坐标 ...

随机推荐

  1. Quartz.Net 使用

    Quartz.NET  是一套很好的任务调度框架. 下面介绍如何使用: 在项目Nuget包管理器中搜索:quartz 安装后会添加如下dll: <packages> <package ...

  2. .net 委托的使用方法以及使用委托的好处

    使用方法: //无返回值无参数委托的定义方法 public delegate void NoReturnPara(); 给委托赋值的几种方式 //实例化委托,并传入方法 NoReturbNoPara ...

  3. python 模块:xlrd && xlwt

    主要来自:http://www.jb51.net/article/60510.htm python读excel--xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本 ...

  4. Neo4j学习笔记(2)——数据索引

    和关系数据库一样,Neo4j同样可以创建索引来加快查找速度. 在关系数据库中创建索引需要索引字段和指向记录的指针,通过索引可以快速查找到表中的行. 在Neo4j中,其索引是通过属性来创建,便于快速查找 ...

  5. form表单样式

    <BODY> <div id="modify-data"> <form class="modify-data-form"> ...

  6. python 中文编码

    import sys sys.setdefaultencoding('utf-8') 保存为:sitecustomize.py 将文件放至: /Library/Frameworks/Python.fr ...

  7. SQL常用增删改查语句

    1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values ('开心 ...

  8. python获取指定目录下的所有指定后缀的文件名

    使用到的函数有: os.path.splitext():分离文件名与扩展名 os.path.splitext(file)[] 获得文件名 os.path.splitext(file)[] 获得文件扩展 ...

  9. HTML知识点总结之<a>标签

    HTML是什么? HTML(Hyper Text Markup Language)超文本标记语言,用来描述网页的一种语言.超文本是指网页不止有文本,还可以有图片,链接,视频,音频等非文本元素.标记语言 ...

  10. MariaDB扩展特性--虚拟列

    存在于表中的列,它们的值是根据确定的表达式或者是根据表中其他列的值自动计算的. 虚拟列有两种,分别对应了定义虚拟列的修饰关键词: 'VIRTUAL'修饰词含义为该虚拟列的值会在查询的时候计算生成. ' ...