首先推荐一篇博客,奇异值分解(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. RabbitMQ 1-入门学习

    环境: 软件环境MacOS ,Homebrew包管理工具 IDE: Eclipse 项目:Maven项目 1.安装RabbitMQ Server: 方式一:通过homebrew :终端执行:brew ...

  2. Docker(六):Docker网络配置进阶

    1.Docker集群网络配置之Weave Weave是Github上一个比较热门的Docker容器网络方案,具有非常良好的易用性且功能强大.仓库地址:https://github.com/weavew ...

  3. 学会C sharp计算机编程语言 轻松开发财务、统计软件

    就像人们用同一种语言才可以顺畅交流一样,语言是计算机编程的根本,是IT世界交流的工具.运用这些计算机语言,人们可以创造出一个美妙的世界.你点击某个网页或是安装一个应用程序软件,这简简单单动作的背后,就 ...

  4. angularjs 怎么获取鼠标焦点 鼠标移入显示浮动的div提示框

    首先,我们要清楚几个基础的知识,angular的两个鼠标移入移出的指令------ng-mouseover(鼠标移入)ng-mouseleave(鼠标移出)--------还有就是window.eve ...

  5. Android中菜单图标等系统自带的图标

    Android™ 2.1 android.R.drawable Icon Resources Android™ 1.5 android.R.drawable Icon Resources Androi ...

  6. webpack3.x基本配置与总结

    基本配置 1.开始之前,请确定你已经安装了当前 Node 的较新版本. 2.然后在文件夹根目录下执行以下命令初始化项目并全局安装webpack: 1.$ cnpm init // 初始化项目 2.$ ...

  7. async await promise

    async 异步函数,以后可能会用得很广. 1.箭头函数: 没有{ }时不写return 也有返回值 2.Promise : 异步神器,很多异步api都是基于Promise 3.new Promise ...

  8. java面向对象知识整理(一)

    1.面向对象思想 概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对像,强调具备功能的对象. 特点:(1)符合人们思考习惯的一种思想. (2)将复杂的事情简单化 ...

  9. Mac appium.dmg. Xcode Command Line Tools

    You need to install the command line tools as marked in your message: ✖ Xcode Command Line Tools are ...

  10. python 中__setattr__, __getattr__,__getattribute__, __call__使用方法

    object._getattr_(self, name) 拦截点号运算.当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法.如果继承树可以找到该属性,则不调用此方法 实例in ...