本文转自公众号 数学与算法之美
我们先看看直观性的内容。矩阵的特征方程式是:
矩阵实际可以看作一个变换,方程左边就是把向量x变到另一个位置而已;右边是把向量x作了一个拉伸,拉伸量是lambda。那么它的意义就很明显了,表达了矩阵A的一个特性就是这个矩阵可以把向量x拉长(或缩短)lambda倍,仅此而已。
任意给定一个矩阵A,并不是对所有的向量x它都能拉长(缩短)。凡是能被矩阵A拉长(缩短)的向量就称为矩阵A的特征向量(Eigenvector);拉长(缩短)的量就是这个特征向量对应的特征值(Eigenvalue)。
值得注意的是,我们说的特征向量是一类向量,因为任意一个特征向量随便乘以一个标量结果肯定也满足上述方程,当然这两个向量都可以看成是同一特征向量,并且它们也对应于同一个特征值。
如果特征值是负数,则说明矩阵不但把特征向量拉长(缩短)了,而且使该向量的方向发生了反转(指向了相反的方向)。一个矩阵可能可以拉长(缩短)多个向量,因此它就可能有多个特征值。另外,对于实对称矩阵来说,不同特征值对应的特征向量必定正交。
我们也可以说,一个变换矩阵的所有特征向量组成了这个变换矩阵的一组基。所谓基,可以理解为坐标系的轴。我们平常用到的大多是直角坐标系,在线性代数中可以把这个坐标系扭曲、拉伸、旋转,称为基变换。我们可以按需求去设定基,但是基的轴之间必须是线性无关的,也就是保证坐标系的不同轴不要指向同一个方向或可以被别的轴组合而成,否则的话原来的空间就“撑”不起来了。在主成分分析(PCA)中,我们通过在拉伸最大的方向设置基,忽略一些小的量,可以极大的压缩数据而减小失真。
变换矩阵的所有特征向量作为空间的基之所以重要,是因为在这些方向上变换矩阵可以拉伸向量而不必扭曲和选择它,使得计算大为简单。因此特征值固然重要,但我们的终极目标却是特征向量。
1. 特征值的数学意义
我们先考察一种线性变化,例如x,y坐标系的椭圆方程可以写为x^2/a^2+y^2/b^2=1,那么坐标系关于原点做旋转以后,椭圆方程就要发生变换。我们可以把原坐标系的(x,y)乘以一个矩阵,得到一个新的(x',y')的表示形式,写为算子的形式就是M*(x,y) =(x',y')。这里的矩阵M代表一种线性变换:拉伸,平移,旋转。那么,有没有什么样的线性变换b(b是一个向量),使得变换后的结果,看起来和让M*(x,y)像是一个数b乘以了一个(x,y)? 换句话说,有没有这样的矢量b,使得矩阵A*b这样的线性变换相当于A在矢量b上面的投影m*b? 如果有,那么b就是A的一个特征向量,m就是对应的一个特征值。
回过头思考这句话,一个矩阵可以是一个变换,也可以是一个坐标系,如果这个坐标系或基正交,当我用这个矩阵乘以一个向量时,如果这个向量也恰好在坐标系也就是基的一个向量所指的方向,那么这个矩阵乘以这个向量不就是把这个向量在那个基上伸缩了λ倍吗?λ就是这个矩阵的特征值。
可是,我们数一数上面有多少个如果——这个工作意义就是告诉大家,我们的想法是不是太理想——那我们放到更一般的情况,讨论某一个非奇异阵。讨论的时候我们换一个思路,上面的思考可能叙述太繁杂了,具体的说,求特征向量的关系,就是把矩阵A所代表的空间,进行正交分解,使得A的向量集合可以表示为每个向量a在各个特征向量上面的投影长度。
例如A是m*n的矩阵,n>m,那么特征向量就是m个(因为秩最大是m),n个行向量在每个特征向量E上面有投影,其特征值v就是权重。那么每个行向量现在就可以写为Vn=(E1*v1n,E2*v2n...Em*vmn),矩阵变成了方阵。如果矩阵的秩更小,矩阵的存储还可以压缩。再: 由于这些投影的大小代表了A在特征空间各个分量的投影,那么我们可以使用最小2乘法,求出投影能量最大的那些分量,而把剩下的分量去掉,这样最大限度地保存了矩阵代表的信息,同时可以大大降低矩阵需要存储的维度,这叫主成分分析,或者主元分析,简称PCA方法,是一种重要的数学模型。
这样就非常容易理解不同特征值的特征向量相互正交了,因为求特征向量就是一个正交化的过程,或者说是求某一个矩阵的基。
举个例子,对于x,y平面上的一个点(x,y),我对它作线性变换,
[1 0 ] [x]
[0 -1 ] [y]
那么得到的结果就是(x,-y),这个线性变换相当于关于横轴x做镜像。我们可以求出矩阵[1,0;0,-1]的特征向量有两个,[1,0]和[0,1],也就是x轴和y轴。什么意思呢? 在x轴上的投影,经过这个线性变换,没有改变。在y轴上的投影,乘以了幅度系数-1,并没有发生旋转。两个特征向量说明了这个线性变换矩阵对于x轴和y轴这两个正交基是线性不变的。对于其他的线性变换矩阵,我们也可以找到类似的,N个对称轴,变换后的结果,关于这N个对称轴线性不变。这N个对称轴就是线性变换A的N个特征向量。这就是特征向量的物理含义所在。所以,矩阵A等价于线性变换A。
再举一个例子:
[0 -1]
[1 0]
大家应该都能看出来,这是一个旋转矩阵,表示向量(x,y)绕原点逆时针旋转了pi/2。它的特征值是多少呢?λ=±i。而特征向量是这竟然是一个虚数。我们直观的思考一下,哪一个轴对于这个旋转变换来说是线性不变的?很明显是z轴。可这是一个二维空间。那么就把这个z轴叫做虚轴吧。但是如果我们把矩阵扩展一维,变成
[0 -1 0]
[1 0 0]
[0 0 1]
这时候再求特征值和特征向量,就会发现特征向量就是(0,0,1)也就是z轴。你看,添加了一维,它就不“虚”了。
(虚特征值不是这篇文章的重点,只是写的时候突然想到了这里。说到这里要提到之前写的“理解复变函数”,发现复变是个深坑,跳进去就找不到路了,概念过于繁杂,只能半年之后才有时间继续。)
虚轴的量有时候可以帮我们把一个没有实际物理形象的量添加到现实空间中。对于电气的学生,应该是要学交流传动的。里面有一个SVPWM电压空间矢量控制,对于电压空间矢量为什么会形成一个轨迹为圆形的磁链。我就是用二维的平面(顺着绕组方向)加了一个虚轴来证明的。这个可以另外讨论。
现在我们继续把讨论范围扩大。我们又特征多项式|λE-A|=0求到的特征值会有重根,这时候求到的这个重根的特征向量就不正交,甚至会线性相关。如果线性无关的话,那就直接把它正交化,问题就很轻松的解决了。即便正交后的结果不一样也没有关系,特征向量本身不是定死的,这就好比坐标系可以旋转一样。一旦特征向量的各个方向确定了,那么特征值向量也就确定了。至于为什么会有些矩阵的特征值会是重根,而且特征向量不正交,这个就要谈到线性方程组的解空间的问题了,足够再写一篇文章,因此不再赘述。
上面说到特征向量不正交的情况,再把讨论范围扩大,特征向量线性相关又怎么办。一句话就可以解释,描述这个变换的矩阵有一维或多维是冗余的,它的剩下的那些变换就足以描述你这个冗余的变换。这类似于向量组的线性无关性。可以想到,奇异阵是不能相似于对角阵的。
既然这个变换的矩阵有一维或者多维是冗余的,那么他就不能相似于一个对角阵。毕竟对n阶对角矩阵来说,它的秩是n,也就是说对角阵的变换无冗余,那你这个有冗余的矩阵也就不能描述这个对角阵。
2、线性代数的本质
线性代数(Linear Algebra),能否用一句话概括那些"线性方程组","线性相关","特征值和特征向量","对角化和相似","二次型和正交化",都是干了什么样的一件事情?
看下面几个矩阵:
[1,0] [2,0] [0,2] [1,-1] [1, 0]
[0,1] , [0,3] , [3,0] , [1, 1] , [1,-1]
我们可以通过计算来看出,上面5个矩阵:第一个矩阵是单位矩阵E,也就是把(x,y)映射到(x',y')保持不变;第二个矩阵映射以后变量的长度(或者叫模,1范数)有变换,向量的角度不变;第3个矩阵对调x/y轴,并且有伸缩;第4个矩阵把x/y逆时针旋转45度,模变成原来的根号2倍;第5个矩阵是对x轴做对称,把y变成-y。2维空间上的线性变换可以用复数乘法来替代,但是更高维的变换就只能借助于矩阵乘法。
矩阵的变换,换一个叫法就是映射。通过三个例子理解线性变换的映射。
(1) 线性方程组AX=B,也就是说,B是x'/y'坐标系一个向量(b1,b2,b3...bn),矩阵A是(x/y)到(x'/y')的映射,能否找到X=(x1,...xn)使得X被映射到B。如果找到了一个,那么这个映射就是唯一的,当然映射也可能没有,也可能有无数种可能的情况。
(2) 那么,什么情况AX=B的解是唯一的呢? 满足行列式|A|!=0。为了满足|A|!=0,必须有a的行向量线性无关,也就是a的每一行都是一个独立的坐标轴,没有冗余的坐标轴。所以坐标系映射的自变量和因变量也就因此一一对应,所以总是有且只有一个解。
(3) 什么情况下无解呢? A的行向量有冗余,最大线性无关(无冗余的坐标系个数),或者秩R(A)=r,但是发现需要通过r个坐标轴的映射,得到s维的映射结果(s>r)。显然无解(找不到低维到高维的一一映射)。同理,如果s<r,那么有无数个解(通解,一对多的映射),s=r正好也是一个解。
矩阵的对角化,揭示了矩阵作为一种线性变换的手段的本质。那么特征值和特征向量的意义,也就很明显了。假设N维坐标系(i1,i2...in)映射到新的坐标系(j1,j2,j3...jn),既然矩阵A代表一种映射关系(变换),那么这种映射关系可以分解为模的伸缩和角度旋转。A=P^(-1)*B*P,B是特征值构成的矩阵,那么每一个特征值,相当于坐标ix映射到jx的那一维的坐标,其模的伸缩比例是多少。可逆矩阵P的每一个列向量代表的就是新的坐标系相当于原有的坐标系如何投影过来----Pi的每一个分量就是(i1...in)在ji上面投影的大小。矩阵对角阵的分解式A=P^(-1)*B*P代表了这样一种信息: 把原坐标系(i1,i2...in)进行旋转(P矩阵),并且幅度进行伸缩(B矩阵),再做一次镜像的旋转P^(-1),因为旋转本身不具有翻转的功能,那么就是原矩阵A的线性变换功能的全部了。
矩阵,就是旋转+镜像翻转+尺度伸缩。这就是一切线性代数和矩阵理论要研究的问题,无出其外。
一个应用的例子就是控制论,系统从状态A变换到状态B(A和B都是矢量)其实就是看是否存在转移矩阵X使得XA=B,或者一些列转移矩阵{X}已知,看看是否存在初始A使得系统状态能够变成要求的状态B,或者已知A和{X}看是否能经过一系列变换得到B。下面几幅图来自<<Visual Complex Analysis>>,画的是复数域(2x2线性变换空间的)的尺度拉伸,平移,旋转,直角平面和极坐标圆平面之间的线性变换。
矩阵对角化其实也是初等变换,但是是把矩阵再变回对角阵。这个对角阵也就是单位阵的不同的方向上进行了伸缩得到的。
所谓的特征矩阵,就是原矩阵如何与一个x维的数量矩阵相似。λ(i)说明了相似投影与一个x维线性空间的第i维坐标轴,λ(i)是放缩比例。λ(i)之间的顺序是不重要的,因为坐标轴之间的交换是初等线性变换,不影响代数拓扑的性质。特征向量xi表明A如何把线性组合投影到一个坐标轴上。所谓的特征向量,就是一组正交基集合。
3、关于正交
正交可以理解为向量的内积为0,也可以理解为向量夹角90度。但是放到线性代数这个大概念,怎么把正交的定义和线性代数的各种概念形成自洽。那就是在某个线性空间中,基为a1,a2,a3……an,某个向量v在各个ax(1≤x≤n)上面的投影分解,表达式唯一或者表述为,a1-an当中的任意向量,在其他向量上面的投影都是0。
其实正交的概念放到不同的地方内涵完全可以不一样。例如在傅立叶级数中,为什么选用cos和sin作为分解的基,正是因为正余弦函数的正交性。
考虑y=f(x)(周期为T)的傅立叶级数展开形式----它相当于,在一个T内f(x)是无穷维向量 (y1,y2,y3,...,yn...),f(x)的傅立叶级数展开式就是f(x)在无穷维正交基(e^jnw)上面有投影,这个正交基是从低频到高频的一些列三角函数组合。每一个投影的系数是一个长度。那么e^jnw组成的正交基就是的任何f(x)的特征向量,不同的是,不同f(x)对应不同的特征值向量。一个N维的向量空间,N个正交矢量不是定死的,而可以是任意的向量值组合,只要保持互相两两正交就可以了。例如我想构造3维的正交基,我随手写下 (1,0,1),那么(0,1,2),(0,0,1)就可以是剩下的两个向量。为什么?一般的说,向量e1,e2,e3是正交基,那么 e1+e2,e2+e3,e1+e3这三个向量也可以构成正交基。
也就是因为三角级数本身可以作为投影的基准,可以分解任何函数。所以三角函数就是特征向量函数,频率分析的值就是特征值。说得远一点,任何数学分析最后都可以用频谱分析来代替。这也就是"信号与系统","数字信号处理","通信原理","概率和随机过程"这些课程,怎么看起来都是在玩频率游戏和功率谱游戏的原因----学完以后经常会感觉自己什么都没有学会。因为在物理层,信息的"意义"并不存在,只有传输和设计的电子/数学特性有意义。通信协议都是高层次的东西,和"通信原理"无关。在底层只有物理意义,没有逻辑意义。
综上,特征值只不过反映了特征向量在变换时的伸缩倍数而已,对一个变换而言,特征向量指明的方向才是很重要的,特征值似乎不是那么重要;但是,当我们引用了Spectral theorem(谱定律)的时候,情况就不一样了。
Spectral theorem的核心内容如下:一个线性变换(用矩阵乘法表示)可表示为它的所有的特征向量的一个线性组合,其中的线性系数就是每一个向量对应的特征值,写成公式就是:。。。
从这里我们可以看出,一个变换(矩阵)可由它的所有特征向量完全表示,而每一个向量所对应的特征值,就代表了矩阵在这一向量上的贡献率——说的通俗一点就是能量(power),至此,特征值翻身做主人,彻底掌握了对特征向量的主动:你所能够代表这个矩阵的能量高低掌握在我手中,你还吊什么吊?
我们知道,一个变换可由一个矩阵乘法表示,那么一个空间坐标系也可视作一个矩阵,而这个坐标系就可由这个矩阵的所有特征向量表示,用图来表示的话,可以想象就是一个空间张开的各个坐标角度,这一组向量可以完全表示一个矩阵表示的空间的“特征”,而他们的特征值就表示了各个角度上的能量(可以想象成从各个角度上伸出的长短,越长的轴就越可以代表这个空间,它的“特征”就越强,或者说显性,而短轴自然就成了隐性特征),因此,通过特征向量/值可以完全描述某一几何空间这一特点,使得特征向量与特征值在几何(特别是空间几何)及其应用中得以发挥。
关于特征向量(特别是特征值)的应用实在是太多太多,近的比如俺曾经提到过的PCA方法,选取特征值最高的k个特征向量来表示一个矩阵,从而达到降维分析+特征显示的方法;近的比如Google公司的成名作PageRank,也是通过计算一个用矩阵表示的图(这个图代表了整个Web各个网页“节点”之间的关联)的特征向量来对每一个节点打“特征值”分;再比如很多人脸识别,数据流模式挖掘分析等方面,都有应用,有兴趣的兄弟可以参考IBM的Spiros在VLDB‘ 05,SIGMOD ’06上的几篇文章。