深度理解矩阵的奇异值,特征值


看了蛮多关于矩阵特征值,奇异值的文章,将他们全部整理出来以供复习。

在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有需要补充的,特别是关于矩阵和映射之间的对应关系。前段时间看了国外的一篇文章,叫A Singularly Valuable Decomposition The SVD of a Matrix,觉得分析的特别好,把矩阵和空间关系对应了起来。本文就参考了该文并结合矩阵的相关知识把SVD原理梳理一下。

SVD不仅是一个数学问题,在工程应用中的很多地方都有它的身影,比如PCA,掌握了SVD原理后再去看PCA那是相当简单的,在推荐系统方面,SVD更是名声大噪,将它应用于推荐系统的是Netflix大奖的获得者Koren,可以在Google上找到他写的文章;用SVD可以很容易得到任意矩阵的满秩分解,用满秩分解可以对数据做压缩。可以用SVD来证明对任意M*N的矩阵均存在如下分解:
在这里插入图片描述
这个可以应用在数据降维压缩上!在数据相关性特别大的情况下存储X和Y矩阵比存储A矩阵占用空间更小!

在开始讲解SVD之前,先补充一点矩阵代数的相关知识。

正交矩阵

正交矩阵是在欧几里得空间里的叫法,在酉空间里叫酉矩阵,一个正交矩阵对应的变换叫正交变换,这个变换的特点是不改变向量的尺寸和向量间的夹角,那么它到底是个什么样的变换呢?看下面这张图

在这里插入图片描述
假设二维空间中的一个向量OA,它在标准坐标系也即e1、e2表示的坐标是中表示为(a,b)’(用’表示转置),现在把它用另一组坐标e1’、e2’表示为(a’,b’)’,存在矩阵U使得(a’,b’)’=U(a,b)’,则U即为正交矩阵。从图中可以看到,正交变换只是将变换向量用另一组正交基表示,在这个过程中并没有对向量做拉伸,也不改变向量的空间位置,加入对两个向量同时做正交变换,那么变换前后这两个向量的夹角显然不会改变。上面的例子只是正交变换的一个方面,即旋转变换,可以把e1’、e2’坐标系看做是e1、e2坐标系经过旋转某个斯塔角度得到,怎么样得到该旋转矩阵U呢?如下

x = [ a , b ] T x=[a,b]^T x=[a,b]T
a ′ = x ∗ e 1 ′ = e 1 ′ T x a'=x*e1'=e1'^Tx a=xe1=e1Tx
b ′ = x ∗ e 2 ′ = e 2 ′ T x b'=x*e2'=e2'^Tx b=xe2=e2Tx

a’和b’实际上是x在e1’和e2’轴上的投影大小,所以直接做内积可得,then

[ a ′ , b ′ ] T = [ e 1 ′ T , e 2 ′ T ] T x [a',b']^T=[e1'^T,e2'^T]^Tx [a,b]T=[e1T,e2T]Tx

从图中可以看到

e 1 ′ = [ cos ⁡ θ , sin ⁡ θ ] T , e 2 ′ = [ − sin ⁡ θ , cos ⁡ θ ] T e1'=[\cos{\theta},\sin\theta]^T,e2'=[-\sin\theta,\cos\theta]^T e1=[cosθ,sinθ]T,e2=[sinθ,cosθ]T
所以
在这里插入图片描述
正交阵U行(列)向量之间都是单位正交向量。上面求得的是一个旋转矩阵,它对向量做旋转变换!也许你会有疑问:刚才不是说向量空间位置不变吗?怎么现在又说它被旋转了?对的,这两个并没有冲突,说空间位置不变是绝对的,但是坐标是相对的,加入你站在e1上看OA,随着e1旋转到e1’,看OA的位置就会改变。如下图:

在这里插入图片描述
如图,如果我选择了e1’、e2’作为新的标准坐标系,那么在新坐标系中OA(原标准坐标系的表示)就变成了OA’,这样看来就好像坐标系不动,把OA往顺时针方向旋转了“斯塔”角度,这个操作实现起来很简单:将变换后的向量坐标仍然表示在当前坐标系中。

旋转变换是正交变换的一个方面,这个挺有用的,比如在开发中需要实现某种旋转效果,直接可以用旋转变换实现。正交变换的另一个方面是反射变换,也即e1’的方向与图中方向相反,这个不再讨论。

总结:正交矩阵的行(列)向量都是两两正交的单位向量,正交矩阵对应的变换为正交变换,它有两种表现:旋转和反射。正交矩阵将标准正交基映射为标准正交基(即图中从e1、e2到e1’、e2’)

特征值分解——EVD

矩阵特征值和特征向量定义

A为n阶矩阵,若数λ和n维非0列向量x满足Ax=λx,那么数λ称为A的特征值,x称为A的对应于特征值λ的特征向量。式Ax=λx也可写成( A-λE)x=0,并且|λE-A|叫做A 的特征多项式。当特征多项式等于0的时候,称为A的特征方程,特征方程是一个齐次线性方程组,求解特征值的过程其实就是求解特征方程的解。

定义引自https://blog.csdn.net/Junerror/article/details/80222540?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158867935419724839218701%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.57644%2522%257D&request_id=158867935419724839218701&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-1
在这里插入图片描述

特征值的含义

https://blog.csdn.net/qq_32742009/article/details/82217051?ops_request_misc=&request_id=&biz_id=102&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2

一般来说,矩阵我们可以看作某种运动,而二维向量可以看作平面上的一个点(或者说一个箭头)。对于点我们是可以观察的,但是运动我们是不能直接观察的。

就好像,跑步这个动作,我们不附加到具体的某个事物上是观察不到的,我们只能观察到:人跑步、猪跑步、老虎跑步、…,然后从中总结出跑步的特点。

要观察矩阵所代表的运动,需要把它附加到向量上才观察的出来:
在这里插入图片描述
似乎还看不出什么。但是如果我反复运用矩阵乘法的话:

在这里插入图片描述

至于为什么会产生这样的现象,可以通过乘幂法来证明。

反复运用矩阵乘法,矩阵所代表的运动的最明显的特征,即速度最大的方向,就由最大特征值对应的特征向量展现了出来。利用乘幂法的思想,每次将最大的特征值对应的向量因素从矩阵中除去,就可以依次得到各个特征值所对应的特征向量。因此矩阵的特征值有如下两种解释

1、解释1

我们可以将矩阵看成是一个力的混合体,但需要注意的是,这个力的混合体中各个力是相互独立的!即特征向量之间线性无关,是无法做力的合成(这里只是假设其无法合成,有更好的解释以后会补充)的。其中力的个数为矩阵的秩,力的大小为特征值的大小,力的方向即为特征向量的方向

此时如果我们对任一向量(这里可以把看成是一个物体,如一个小方块)无限施加这个力的集合,正如上图所示的那样,最终小方块运动的方向即为力最大的那个方向。即向量会收敛为最大特征值的特征向量。去掉这个力,不断重复,即可以得到第二个、第三个特征向量。

这就是为什么我们将这样的向量定义为矩阵的特征向量,因为一方面它能够体现出线性变换中力的方向及大小,另一方面可以可以通过分析特征值得到该线性变换的主导因素。

再啰嗦几句,概括来说就是,特征值与特征向量可以告诉我们这个矩阵它产生的线性变换做了什么以及主要做了什么。

2、解释2

另一个更直观的解释就是颜料混合。我们将矩阵看成一个篮子,重点不在篮子。在篮子里面有一堆颜料,包含了种颜色,为矩阵的秩,但每种颜色的分量都不一样。先上结论——特征值代表了分量,特征向量表示了颜色。对任一向量(这里可以把看成是一滩液体,无所谓本来是什么颜色),每次施加矩阵变换就是把篮子里的所有颜料都泼进去,泼无数次,最后清水的颜色就变成了颜色最多的颜色(这里不要计较什么颜料无限混合最后都是黑色灰色的,直观一点理解)。

假设我们现在有办法可以去掉篮子中指定颜色的所有颜料。则可以依次根据特征值排序得到特征向量。

通过这么一个比喻,我们也可以得出同样的结论。

矩阵包含了一堆信息——颜料的种类与颜料的数量。如果我们可以通过矩阵分解将其分离出来,保留那些分量大的颜色,而去除那些可有可无的颜色就可以实现信息压缩等变换

分解过程详解

https://blog.csdn.net/zhongkejingwang/article/details/43053513

在讨论SVD之前先讨论矩阵的特征值分解(EVD),在这里,选择一种特殊的矩阵——对称阵(酉空间中叫hermite矩阵即厄米阵)。对称阵有一个很优美的性质:它总能相似对角化,对称阵不同特征值对应的特征向量两两正交。一个矩阵能相似对角化即说明其特征子空间即为其列空间,若不能对角化则其特征子空间为列空间的子空间。现在假设存在mxm的满秩对称矩阵A,它有m个不同的特征值,设特征值为

λ i \lambda_i λi
对应的单位特征向量为
x i x_i xi
则有
在这里插入图片描述
在这里插入图片描述
所以可得到A的特征值分解(由于对称阵特征向量两两正交,所以U为正交阵,正交阵的逆矩阵等于其转置)

在这里插入图片描述
这里假设A有m个不同的特征值,实际上,只要A是对称阵其均有如上分解。

矩阵A分解了,相应的,其对应的映射也分解为三个映射。现在假设有x向量,用A将其变换到A的列空间中,那么首先由U’先对x做变换:

在这里插入图片描述
U是正交阵U’也是正交阵,所以U’对x的变换是正交变换,它将x用新的坐标系来表示,这个坐标系就是A的所有正交的特征向量构成的坐标系。比如将x用A的所有特征向量表示为:

在这里插入图片描述
则通过第一个变换就可以把x表示为[a1 a2 … am]’:

在这里插入图片描述
紧接着,在新的坐标系表示下,由中间那个对角矩阵对新的向量坐标换,其结果就是将向量往各个轴方向拉伸或压缩:

在这里插入图片描述
从上图可以看到,如果A不是满秩的话,那么就是说对角阵的对角线上元素存在0,这时候就会导致维度退化,这样就会使映射后的向量落入m维空间的子空间中。

最后一个变换就是U对拉伸或压缩后的向量做变换,由于U和U’是互为逆矩阵,所以U变换是U’变换的逆变换。

因此,从对称阵的分解对应的映射分解来分析一个矩阵的变换特点是非常直观的。假设对称阵特征值全为1那么显然它就是单位阵,如果对称阵的特征值有个别是0其他全是1,那么它就是一个正交投影矩阵,它将m维向量投影到它的列空间中

根据对称阵A的特征向量,如果A是2*2的,那么就可以在二维平面中找到这样一个矩形,是的这个矩形经过A变换后还是矩形:

在这里插入图片描述
这个矩形的选择就是让其边都落在A的特征向量方向上,如果选择其他矩形的话变换后的图形就不是矩形了!

奇异值分解——SVD

上面的特征值分解的A矩阵是对称阵,根据EVD可以找到一个(超)矩形使得变换后还是(超)矩形,也即A可以将一组正交基映射到另一组正交基!那么现在来分析:对任意M*N的矩阵,能否找到一组正交基使得经过它变换后还是正交基?答案是肯定的,它就是SVD分解的精髓所在。

现在假设存在M*N矩阵A,事实上,A矩阵将n维空间中的向量映射到k(k<=m)维空间中,k=Rank(A)。现在的目标就是:在n维空间中找一组正交基,使得经过A变换后还是正交的。假设已经找到这样一组正交基

在这里插入图片描述
所以如果正交基v选择为A’A的特征向量的话,由于A’A是对称阵,v之间两两正交,那么

在这里插入图片描述
这样就找到了正交基使其映射后还是正交基了,现在,将映射后的正交基单位化:

在这里插入图片描述
在这里插入图片描述
继而可以得到A矩阵的奇异值分解:

在这里插入图片描述
现在可以来对A矩阵的映射过程进行分析了:如果在n维空间中找到一个(超)矩形,其边都落在A’A的特征向量的方向上,那么经过A变换后的形状仍然为(超)矩形!

vi为A’A的特征向量,称为A的右奇异向量,ui=Avi实际上为AA’的特征向量,称为A的左奇异向量。下面利用SVD证明文章一开始的满秩分解:

在这里插入图片描述
可以看到第二项为0,有
在这里插入图片描述
则A=XY即是A的满秩分解。

矩阵的奇异值与特征值有什么相似之处与区别之处

https://blog.csdn.net/mjl960108/article/details/70988759?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158868128619724845051798%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.57644%2522%257D&request_id=158868128619724845051798&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-3

矩阵可以认为是一种线性变换,如果将这种线性变换放在几何意义上,则他的作用效果和基的选择有关。

以Ax = b为例,x是m维向量,b是n维向量,m,n可以相等也可以不相等,表示矩阵可以将一个向量线性变换到另一个向量,这样一个线性变换的作用可以包含旋转、缩放和投影三种类型的效应。

比如说:

在这里插入图片描述
其几何意义为在水平x方向上拉伸3倍,y方向保持不变的线性变换,这就是缩放;而如果前面乘的矩阵不是对称矩阵,那么则对应几何意义上的缩放加旋转

奇异值分解正是对线性变换这三种效应的一个析构。A=μΣσ,μ和σ是两组正交单位向量,Σ是对角阵,对角值s表示奇异值,它表示我们找到了μ和σ这样两组基,A矩阵的作用是将一个向量从σ这组正交基向量的空间旋转到μ这组正交基向量空间,并对每个方向进行了一定的缩放(乘个缩放因子),缩放因子就是各个奇异值,然后再在μ旋转回去。如果σ维度比μ大,则表示还进行了投影。可以说奇异值分解将一个矩阵原本混合在一起的三种作用效果,分解出来了。

而特征值分解其实是对旋转缩放两种效应的归并。(有投影效应的矩阵不是方阵,没有特征值)特征值,特征向量由Ax=λx得到,它表示如果一个向量v处于A的特征向量方向,那么Av对v的线性变换作用只是一个缩放。也就是说,求特征向量和特征值的过程,我们找到了这样一组基,在这组基下,矩阵的作用效果仅仅是存粹的缩放。对于实对称矩阵,特征向量正交,我们可以将特征向量式子写成A=xλxT,这样就和奇异值分解类似了,就是A矩阵将一个向量从x这组基的空间旋转到x这组基的空间,并在每个方向进行了缩放,由于前后都是x,就是没有旋转或者理解为旋转了0度。

总而言之,特征值分解和奇异值分解都是给一个矩阵(线性变换)找一组特殊的基,特征值分解找到了特征向量这组基,在这组基下该线性变换只有缩放效果。而奇异值分解则是找到另一组基,这组基下线性变换的旋转、缩放、投影三种功能独立地展示出来了
又因为有投影效应的矩阵不是方阵,没有特征值,所以奇异值分解可以适用于所有矩阵,但特征值分解就仅仅适用于方阵了

  • 32
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue2项目的目录结构通常如下: ``` ├── build // 项目构建相关的代码 │ ├── build.js // 生产环境构建代码 │ ├── check-versions.js // 检查node、npm等版本 │ ├── dev-client.js // 开发服务器热重载配置 │ ├── dev-server.js // 开发服务器配置 │ ├── utils.js // 构建相关工具方法 │ ├── webpack.base.conf.js // webpack基础配置 │ ├── webpack.dev.conf.js // webpack开发环境配置 │ └── webpack.prod.conf.js // webpack生产环境配置 ├── config // 项目开发环境配置 │ ├── dev.env.js // 开发环境变量 │ ├── index.js // 项目配置文件 │ ├── prod.env.js // 生产环境变量 │ └── test.env.js // 测试环境变量 ├── src // 源码目录 │ ├── assets // 资源目录,如图片、字体等 │ ├── components // 公共组件目录 │ ├── router // 前端路由 │ ├── store // 应用级数据(state)管理目录 │ ├── utils // 工具函数目录 │ ├── views // 页面目录 │ ├── App.vue // 主组件 │ └── main.js // 入口文件 ├── static // 静态资源目录,如图片、字体等 ├── test // 测试相关目录 ├── .babelrc // babel配置文件 ├── .editorconfig // 定义代码格式 ├── .eslintignore // eslint忽略目录或文件 ├── .eslintrc.js // eslint配置文件 ├── .gitignore // git忽略目录或文件 ├── .postcssrc.js // postcss配置文件 ├── index.html // 项目入口文件 └── package.json // 项目基本信息 ``` 其中,`build`目录存放构建相关的代码,`config`目录存放项目开发环境的配置,`src`目录存放源码,`static`目录存放静态资源,`test`目录存放测试相关的代码。 `src`目录下,`assets`目录存放各种资源文件,如图片、字体等;`components`目录存放公共组件;`router`目录存放前端路由相关代码;`store`目录存放应用级数据(state)管理相关代码;`utils`目录存放工具函数相关代码;`views`目录存放页面相关代码;`App.vue`是主组件;`main.js`是入口文件。 以上是一个常见的Vue2项目目录结构,具体项目可能会略有差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值