主成分分析(Principal component analysis, PCA)是一个在统计以及机器学习领域十分常用的方法,很多偏应用的文章和视频已经很好地讲解了PCA的几何解释,以及具体在做什么。这篇文章我来写一下PCA方法的数学推导。
首先,我们知道,PCA尝试从数据集中逐一提取方差最大的成分(Components),直到保留的成分能够解释数据大部分的方差/变异,同时这些保留的成分数量往往又远小于原始变量的数量(因为大多数数据集中的变量都存在比较强的相关),从而达到降维的目的。
那么我们如何获得这样的成分呢?假设我们有一组随机变量x1, x2, …, xp,那么我们将成分定义为它们的线性组合:
我们想要做的是使这个组合出来的新成分的方差最大。现在有一个显而易见的答案摆在我们面前,就是将所有⍺值设置为无限大,这样就可以获得方差无限大的成分了!这显然不是我们想要的结果,所以我们需要对⍺的值施加一些限制,设置如下:
如上,我们保证⍺1向量的模为1,这样就保证了各个⍺的平方和始终为1,我们在这个限制下调整成分中每个x变量的配比,从而使获得的成分的方差最大。
现在我们需要求这个成分的方差,我在《【线性代数】二次型转化的小技巧与应用》的文章中讲过如何求一组变量线性组合的方差,结果如下:
接下来我们需要在⍺1T⍺1=1的限制条件下,去最大化这一项,我们该如何做呢?我在《透彻解析拉格朗日乘数法》中提到了我们可以用拉格朗日乘数法,将上式改写为:
然后,我们就可以对该式进行求导,将其等于0来获得最大值的情况:
(上述过程中涉及到了Matrix Calculus,是我尚未更新过的内容,我会根据这期内容的读者反馈,阅读量以及点赞量来决定是否更新)
从求导后的结果,我们发现,⍺1向量及为所有x变量协方差矩阵的特征向量。我们还可以利用该结果回过头来计算对应成分的方差即为特征根:
所以,如果我们要方差最大的成分,仅需将所有x变量按照最大的特征根(方差)对应的特征向量进行线性组合,然后我们可以选取第二大的特征根对应的特征向量进行线性组合,获得方差第二大的成分,依此类推……
同时,由于协方差矩阵是对称矩阵,我们很容易知道它的各个特征向量相互正交,进而可以得出每个主成分相互独立(协方差为0),或者说相互正交:
上述的过程是PCA的一种数学推导以及计算方式,实际上,我们也可以用奇异值分解来完成PCA,同时我们能够通过奇异值分解的方法洞见更多有关PCA的性质,关于这一点,我会在后面的文章中慢慢总结。如果这篇文章对你有帮助的话,欢迎点个赞和在看,你的支持是我更新最大的动力!