1. 前言
最近几天一直在学习矩阵的知识,恶补了特征分解和SVD算法,发现网上很多资料都是不全的,所以想记录一下这里面的特征分解推导过程。
要学会矩阵的特征分解,可以提前看矩阵的一些基础知识: https://blog.csdn.net/qq_30232405/article/details/104588293
2.矩阵的进阶知识
2.1 特征分解(谱分解)=>只可以用在方阵上
2.1.1 特征分解的原理
如果说一个向量
- 这种形式在数学上的含义:描述的是矩阵
对向量的变换效果只有拉伸,没有旋转。(因为这个值是一个数值)
- 这时候
就被称为特征向量对应的特征值
也可以看成矩阵
根据公式(2-2)就可以得到矩阵
- 矩阵的一组特征向量
是一组正交向量。
- 其中
是这个矩阵的特征向量组成的矩阵,是一个对角阵,每一个对角线上的元素就是一个特征值。
总结:特征分解,可以得到
2.1.2 特征分解的合理性
一个矩阵和该矩阵的非特征向量相乘是对该向量的旋转变换;一个矩阵和该矩阵的特征向量相乘是对该向量的伸缩变换,其中伸缩程度取决于特征值大小。
矩阵在特征向量所指的方向上具有 增强(或减弱)特征向量 的作用。这也就是说,如果矩阵持续地叠代作用于向量,那么特征向量的就会突显出来,利用python进行计算:
- 首先举一个例子,假设矩阵
和向量:
-
用矩阵
import
得到结果:
可以看到不断左乘A后,变换后的归一化向量在(0.33,0.2,0.46)附近徘徊,这与计算出来的最大特征值对应的特征向量归一化后的结果是一致的,这也就佐证了矩阵是具有某种不变的特性的。因此为了提取矩阵这种“不变性”,或者说是为了描述变换(矩阵惩罚是一种线性变换)的主要方向是非常有必要的。
2.1.3 特征分解的计算
在 (2-1) 式的基础上,进行一些变形 :
根据线性方程组理论,为了使这个方程有非零解,矩阵
注意:要注意特征值是重根时的情况。。。。
(1)手算
求矩阵$A$的特征值和特征向量:
可以得到结果:
当
当
当
(2)python计算
使用python中自带的库eig,其中
import
结果为:
发现python计算的和手算的特征向量值不同,但比例是一样的,这是因为特征向量不是唯一的,特征向量来自齐次线性方程组的解,是齐次线性方程组的基础解系的非零线性组合。
2.1.4 对称矩阵的特征分解(这个性质后面SVD推导用到)
定理:假设矩阵$A$是一个对称矩阵,则其不同特征值对应的特征向量两两正交。
证明:
首先进行特征分解:
在公式(2-6)左乘
因为矩阵A是一个对称矩阵,可以对式(2-8)的左边做如下变换:
最后通过(2-9)可以得到: