PCA算法原理:为什么用协方差矩阵以及协方差矩阵的特征值特征向量降维

2021/6/30 22:50:58

本文主要是介绍PCA算法原理:为什么用协方差矩阵以及协方差矩阵的特征值特征向量降维,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

参考来源:https://www.pianshen.com/article/8345891130/

1.PCA(Principal Components Analysis)降维:

PCA作用:用于数据预处理,降低数据维度

PCA目的:去除无用数据,减少计算量

2.PCA为什么要用协方差矩阵以及协方差矩阵的特征值特征向量降维

既然是降维,就要考虑降低哪些维度以及保存哪些维度,一个简单的想法是:

保留重要的,这样可以更好的保留原始数据的信息,以防信息缺失

所以怎样才能知道哪里的信息重要呢?

确定信息的重要性,首先要确定何为信息

根据信息论的内容,信息是用来衡量不确定性大小的,也就是说越是不确定、未知的事务其包含的信息量越大,比如我们需要区分汽车种类,所拥有的数据包含车标、轮胎样式等,如果给定的数据集中其轮胎样式均是同一个品牌,则我们无法得到任何的区分信息(获得的信息量=0),从而也就无法区分汽车品类,而如果数据集中包含不同的车标,根据车标我们可以很容易的推断出车的种类。

更近一步,如果一个特征其包含的数据全部集中在一个点或者一个范围之内(方差较小 --> 数据点距离均值点不分散),则我们无法使用这个特征进行分类,从而也就得到这个特征不重要,相反如果一个特征让数据很分散(方差大),使得我们易于分类则表明此特征很重要。

所以进行特征降维时删除的应该是不重要的的特征,即方差较小的特征,也即不利于分类的特征。

另外当我们已经确定了一个重要的特征,则与之具备线性相关关系的特征就可以进行忽略了,因为一旦具备线性相关关系,则表明一个特征可以通过另外一个特征线性表达出来。

假设我们有数据集D其大小为m x n(m为样本个数,n为特征数,即样本维度)

我们假设使用矩阵P (维度为 n x k) 来变换数据D使得其维度降为n x k

而使用什么样的矩阵P来进行放缩呢?

还是回到我们刚刚谈论的,我们要保留特征方差较大的,而且不需要线性相关的

而根据线性代数相关的知识可以得到,具备这种性质的有一种矩阵叫 协方差矩阵,其同一元素的协方差为其方差,我们要找最大的 k 个,其非对角线元素则表示两个特征之间的关系,由上,我们希望其为0。

补充知识:矩阵的迹:矩阵的对角线之和https://baike.baidu.com/item/%E7%9F%A9%E9%98%B5%E7%9A%84%E8%BF%B9/8889744?fr=aladdin

所以由上我们想得到的变换之后的Y (Y=DP,Y为降维后的数据) 其协方差应该是:

C_{Y} = \begin{vmatrix} c_{11} & 0 & 0 & 0\\ 0& c_{22} & 0 & 0\\ 0& 0 & c_{33} & 0\\ 0& 0 & 0 & c_{44} \end{vmatrix}_{k\times k}

根据协方差定义:

C_{Y} = \frac{1}{m-1}YY^T = \frac{1}{m-1}(DP)^T(DP) = \frac{1}{m-1} P^TD^TDP = P^T(\frac{1}{m-1}D^TD)P

=P^TC_{D}P

要得到一个最优的C_{Y},及对角线上的方差是最大的,也即对角线的方差和是最大的即迹的值最大:max(Tr(C_{Y})) = max(Tr(P^TC_{D}P))

由拉格朗日乘子法:

我们构建函数 :

f(p) = Tr(P^TC_{D}P)+\lambda (P^P-H)

假设P^TP = H (近似)则满足定义:

要想求函数的极值,则需要求导,\frac{\partial AB}{\partial A} = B^T

\frac{\partial f}{\partial P} = \frac{\partial Tr(P^TC_DP)}{\partial P}+\lambda \frac{\partial (P^TP - H)}{\partial P} = (P^TC_{D})^T+\lambda P = CP + \lambda P

令其为0,则C_{D}P = (-\lambda )P

而上则等同于C_{D}的特征值特征向量,所以可得依照原始数据的协方差矩阵,寻找其特征向量组成P矩阵就是要找的变换矩阵,而特征值反应了特征向量的程度,所以选取前k大的特征值组成的特征向量进行PCA降维可保存重要信息。



这篇关于PCA算法原理:为什么用协方差矩阵以及协方差矩阵的特征值特征向量降维的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程