本文主要讲PCA的相关数学推导。PCA的数学推导用线性代数的知识就可以完成。
参考deeplearningbook.org一书2.12 Example: Principal Components Analysis
参考李航统计学习方法第16章主成分分析
本文的目录如下:
目录
我们先讲两个用到的线性代数知识点:
用到的知识点
1、矩阵对角线元素之和(the trace operator)
矩阵对角线元素之和(the trace operator),记做 Tr ,定义如下:
它有如下的性质:
1一个矩阵的trace等于它的转置的trace
2 循环置换性
2、矩阵的 Frobenius norm :
它有如下的性质:
好啦,两个小知识点说完,就开始PCA啦~
PCA 数学推导
我们有 空间上的 m 个点,每一个点都是 n 维的向量。我们把这些点存起来, 要用 个单位内存空间,如果我们空间有限,能不能用更少的空间存储和原来差不多的信息,使得信息减少尽可能的小。一个方法就是降维,对于每个点 ,我们找到这个点对应的的 ,并且 ,这样就可以减少原始数据的存储空间,用数学表达式表示出来就是, ,这里的 指 , 指 ,为了看着方便,我们后边就用 和 表示任意点的原始向量和降维之后的向量, 函数是编码函数(encoding function), 函数是解编码函数(decoding function)。(为什么要用解码函数呢?因为是维向量,是维向量,不同维度的向量无法比较)
PCA就是提供了这样一种降维的方法。
开始正式推导啦~
PCA的推导先从解编码函数说起,为了使解编码函数尽可能简单,可以选择矩阵相乘的方式使得,其中。如果不做任何限制,计算最优的比较困难,所以对 做一些限制的话看看能不能得到我们想要的效果。事实上我们可以假设 的每一列之间都是正交的,(此时的还不是正交矩阵,因为)。为了使编码后的向量唯一,限制的每一列向量都是单位向量。对做了这个限制后计算最优的就比原来简单很多。
PCA需要同时求出优秀的和,同时求两个毫不相干的最优解求不出来,我们是否可以先保持一个变量不变,求出最优的,如果最优的可以用表示,那么进而再去求,这是被证明有效的行得通的方法。我们按照这个想法往下走
最小化原向量和经过编码以及解码后的向量的欧式距离来求解最优的,式子如下:
式子里的欧式距离可以转换成矩阵形式:
然后根据矩阵的分配律将这个欧式距离展开:
因为 和 相等,都是一个实数,将欧式距离化简得:
将化简后的欧式距离带入最初的式子,并且省略掉一项(因为与优化无关),得:
将 换成 (被限制列相互线性独立并且都是单位向量,所以):
因为任何矩阵乘单位矩阵不会发生改变,得:
我们运用矩阵微积分运算对 进行求导,令导数为0 ,我们得到:
我们已经求出最优的啦,因为,所以:
接下来我们求最优的:
设,其中,,所以有
最优的 可以用下述来表示:
其中表示第个样本,表示第个样本的第维数值。因为我们不只是针对n维空间里的一个向量优化,我们要对n维空间里的所有向量进行优化。
把欧式距离 转化成 欧式距离 的平方(不改变优化);并从 开始优化(我们这里先证明的情况,然后推导 的情况),此时 就变成了一个向量,我们记做 ,则:
因为 是个实数,所以我们可以把 移动到向量的左边:
我们把 看成一个整体, 由于 是一个实数,实数的转置还是自己,所以:
我们可以把 消掉,设 且 ,用我们先前讲的Frobenius norm可得:
我们先不管限制项,把前边的式子化简成矩阵形式,用到我们先前讲的知识点可以得到:
然后我们将矩阵相乘展开:
我们用先前讲的 (把当作,当作) 可得:
同理,我们这次把当作,当作可得:
不要忘了我们还有一个限制,,代入可得到:
先前讲的 ,(把当作,当作) 可得:
因为 是个实数,可以把前边的去掉:
subject to
到现在为止,已经化简到我们想要的形式了,是一个实对称矩阵, 所以能进行特征分解,所以能使 达到最大的 是的最大特征值对应的特征向量。
我们证明证明的是 的特殊情况,当时, ,我们不难推出:
subject to ,
使 达到最大的 是的最大特征值的特征向量。
在达到最大的基础上求最优的,使 达到最大的 是的次大特征值的特征向量。
当时,和等于2时是一样的道理。
PCA去中心化
在数学证明过程中,我们只需要求的前 大特征值对应的特征向量就好了。但是有一个问题我们不得不考虑,那就是每一维数据的量纲差别大的问题。如果数据其中某一特征(矩阵的某一列)的数值特别大,那么它在整个误差计算的比重上就很大,最小化误差的过程中,就会忽略数值比较小的特征,在PCA前我们并不知道每个特征的重要性,这很可能导致了大量的信息缺失。所以去中心化是必要的。
去中心化后指的是:矩阵中每列各个数据要减去这列的平均值然后和这列标准差做商,即:
其中:
假设去中心化后的矩阵是,那么协方差矩阵就是,那么PCA就是求 的前 大特征值对应的特征向量。
基于奇异值分解的计算方法
传统的主成分分析通过数据的协方差矩阵的特征值分解进行,现在常用的方法是通过数据矩阵的奇异值分解进行。
通过数据的协方差矩阵的特征值分解求主成分就不多讲了,我们讲讲通过奇异值分解的方法求主成分。奇异值分解可参考奇异值分解(SVD)(Singular Value Decomposition)。
我们知道,对 的实矩阵 ,假设其秩为 ,,则可将矩阵 进行截断奇异值分解:
定义一个新的 矩阵
(是去中心化后的矩阵)
那么
记协方差矩阵 为 。
主成分分许归结于求协方差矩阵的特征值和对应的单位特征向量,也就是求矩阵 的特征值和对应的单位特征向量。
假设的截断奇异值分解为 ,那么 的列向量就是 的前 k 主成分。于是,求的特征值特征向量可以通过求的奇异值分解来实现。
结论
PCA是一种降维方法。取的协方差矩阵 的前 大特征值对应的特征向量,将这些特征向量拼起来作为各个列 得到 解编码矩阵 。编码矩阵是。
实现方法可对原数据矩阵的协方差矩阵求特征分解,也可对去中心化后的原数据矩阵求奇异值分解。
呼,终于完事啦~