前面两篇文章讲了PCA和SVD,发现要完全理解,必须要有一些矩阵的基础知识。在这里再补充一下自己对特征值的理解,希望对大家有所帮助,有不正确的地方,欢迎大家指出。

特征值在java中的应用实例_特征值在java中的应用实例

现在,我们来看一看矩阵的特征值和特征向量。
我们发现有些向量特征值在java中的应用实例_特征值在java中的应用实例_02比较特殊,用矩阵对它进行行列变换后,向量的方向没有变化,只是在原来的基础上,扩大或缩小了特征值在java中的应用实例_机器学习_03倍,特征值在java中的应用实例_PCA_04。我们把这样的向量,称作矩阵的特征向量,而把这个特征值在java中的应用实例_机器学习_03称作矩阵的特征值。(注:只有方阵才有特征值,特征值的数量和矩阵的行数相等)

特征值的发现能够方便我们计算。假设特征值在java中的应用实例_SVD_06特征值在java中的应用实例_SVD_07是矩阵特征值在java中的应用实例_特征值_08的两个特征向量,特征值在java中的应用实例_机器学习_09特征值在java中的应用实例_特征值在java中的应用实例_10;假设空间中的某个向量可以由特征向量表示,特征值在java中的应用实例_特征值_11
用矩阵特征值在java中的应用实例_特征值_08对向量特征值在java中的应用实例_SVD_13进行转换,特征值在java中的应用实例_特征值在java中的应用实例_14,只用把两个向量相加,我们就能知道变换后的结果,大大简化了我们的行列计算。

其实,我们可以把特征向量理解成一个特殊坐标系,每一个特征向量表示一个坐标轴,用矩阵特征值在java中的应用实例_特征值_08的特征向量组成的坐标系来表示空间中的向量特征值在java中的应用实例_SVD_13,能够大大简化矩阵特征值在java中的应用实例_特征值_08对向量特征值在java中的应用实例_SVD_13的转换计算。


上面讲的,都是线性代数中的概念,没有什么实际意义。
在实际情况中,我们遇到的是数据,想处理的也是数据。一个特征值在java中的应用实例_特征值_19矩阵包含的信息是一组数据,比如特征值在java中的应用实例_特征值_20个样本,每个样本又有特征值在java中的应用实例_PCA_21个维度的值。它不是一个方阵,也没有特征值和特征向量。我们能够用特征值对这个矩阵作什么处理呢?

虽然我们得到的数据矩阵特征值在java中的应用实例_特征值_22没有特征值和特征向量,但是特征值在java中的应用实例_SVD_23却是一个特征值在java中的应用实例_SVD_24的方阵,并且是一个对称方阵。矩阵特征值在java中的应用实例_SVD_23是有特征值的,特征值在java中的应用实例_机器学习_26。并且对称矩阵还有一个很重要的性质,对称矩阵的特征值两两正交,特征值在java中的应用实例_PCA_27

证明:
特征值在java中的应用实例_SVD_28
如果特征值特征值在java中的应用实例_特征值_29 不相等的话,那么特征值在java中的应用实例_SVD_30,特征向量特征值在java中的应用实例_机器学习_31

假设矩阵特征值在java中的应用实例_PCA_32,它是列由特征值在java中的应用实例_SVD_23 的特征向量构成的一个矩阵,那么有特征值在java中的应用实例_PCA_34。假设特征值在java中的应用实例_SVD_35是一个对称矩阵,
特征值在java中的应用实例_PCA_36

特征值在java中的应用实例_特征值_37。所以特征值在java中的应用实例_特征值_38。我们知道特征值特征值在java中的应用实例_PCA_39两两正交,因而特征值在java中的应用实例_特征值_40是一个正交矩阵。正交矩阵有一个性质,特征值在java中的应用实例_PCA_41

证明:让我们来看下特征值在java中的应用实例_特征值_42 的第特征值在java中的应用实例_特征值在java中的应用实例_43 个元素,特征值在java中的应用实例_特征值_44。由于正交矩阵的列两两正交,那么特征值在java中的应用实例_特征值在java中的应用实例_45特征值在java中的应用实例_特征值_46(因为特征值在java中的应用实例_特征值在java中的应用实例_47是单位向量),所以有
特征值在java中的应用实例_特征值在java中的应用实例_48
所以, 特征值在java中的应用实例_SVD_49,即特征值在java中的应用实例_SVD_50

于是,对于一个对称矩阵特征值在java中的应用实例_特征值_51,我们可以将其表示为:特征值在java中的应用实例_特征值_52,其中,特征值在java中的应用实例_特征值_40是一个正交矩阵,列向量是矩阵特征值在java中的应用实例_特征值_51 的特征向量;特征值在java中的应用实例_SVD_35是一个对角矩阵,对角线上的值是矩阵特征值在java中的应用实例_特征值_51 的特征值。
这个性质很巧,正式我们在PCA里面用到的矩阵的斜对角定理

有了这样的特征矩阵,我们可以将特征值在java中的应用实例_特征值_40看作一个坐标系,这个坐标系有一个很好的性质,就是和我们经常看见的特征值在java中的应用实例_特征值在java中的应用实例_58

我们最想做的事情是,对数据特征值在java中的应用实例_特征值_22进行转换,转换后它各个维度之间相互独立,相关性为0,这样可以有助于我们更清晰的分析各个维度。矩阵特征值在java中的应用实例_SVD_23 的特征向量构成的坐标系特征值在java中的应用实例_特征值_40,正好就有就有让原数据特征值在java中的应用实例_特征值_08转化后,各个维度之间相互独立的这个神奇的特点。

将原数据特征值在java中的应用实例_特征值_08转换到该坐标系上,特征值在java中的应用实例_SVD_64。我们再来计算一下转换后矩阵的协方差系数,发现矩阵特征值在java中的应用实例_SVD_64各个坐标系之间的数据相互独立,即特征值在java中的应用实例_SVD_66特征值在java中的应用实例_SVD_35是一个对角矩阵,就是说转化后的矩阵特征值在java中的应用实例_SVD_64,各行之间的数据相关性为0。这就是我们在PCA详解里面说的主要思想,这里特征值在java中的应用实例_特征值_40

由于这次讲的概念比较简单,我贴了两个证明过程,增加一点内容,希望能够帮助大家理解。同样,有问题欢迎大家提出。
至此,我的PCA,SVD,特征值三部曲全部完成。