主成分分析(PCA)(principal component analysis)

本文主要讲PCA的相关数学推导。PCA的数学推导用线性代数的知识就可以完成。

参考deeplearningbook.org一书2.12 Example: Principal Components Analysis

参考李航统计学习方法第16章主成分分析

本文的目录如下:

目录

用到的知识点

PCA 数学推导

PCA去中心化

基于奇异值分解的计算方法

结论


我们先讲两个用到的线性代数知识点:

用到的知识点

1、矩阵对角线元素之和(the trace operator)

矩阵对角线元素之和(the trace operator),记做 Tr ,定义如下:

它有如下的性质:

1一个矩阵的trace等于它的转置的trace

2 循环置换性

 

 2、矩阵的 Frobenius norm :

 它有如下的性质:

 好啦,两个小知识点说完,就开始PCA啦~

PCA 数学推导

我们有 \mathbb{R}^{n} 空间上的 m  个点\{\boldsymbol{x}^{(1)},\boldsymbol{x}^{(2)},\cdot \cdot \cdot ,\boldsymbol{x}^{(m)} \},每一个点都是 n 维的向量。我们把这些点存起来, 要用 m\times n 个单位内存空间,如果我们空间有限,能不能用更少的空间存储和原来差不多的信息,使得信息减少尽可能的小。一个方法就是降维,对于每个点 \boldsymbol{x}^{(i)}\in \mathbb{R}^{n},我们找到这个点对应的的 \boldsymbol{c}^{(i)}\in \mathbb{R}^{l},并且 l < n,这样就可以减少原始数据的存储空间,用数学表达式表示出来就是f(\boldsymbol{x})=\boldsymbol{c}\boldsymbol{x}\approx g(f(\boldsymbol{x})) ,这里的 \boldsymbol{x} 指 \boldsymbol{x}^{(i)}c 指 \boldsymbol{c}^{(i)} ,为了看着方便,我们后边就用\boldsymbol{x} 和 \boldsymbol{c}表示任意点的原始向量和降维之后的向量,f 函数是编码函数(encoding function),g  函数是解编码函数(decoding function)。(为什么要用解码函数呢?因为\boldsymbol{x}n维向量,\boldsymbol{c}l维向量,不同维度的向量无法比较)

PCA就是提供了这样一种降维的方法。

开始正式推导啦~

PCA的推导先从解编码函数说起,为了使解编码函数尽可能简单,可以选择矩阵相乘的方式使得g(\boldsymbol{c})=\boldsymbol{D}\boldsymbol{c},其中\boldsymbol{D}\in \mathbb{R}^{n\times l}。如果不做任何限制,计算最优的\boldsymbol{D}比较困难,所以对 \boldsymbol{D} 做一些限制的话看看能不能得到我们想要的效果。事实上我们可以假设 \boldsymbol{D} 的每一列之间都是正交的,(此时的\boldsymbol{D}还不是正交矩阵,因为l\neq n)。为了使编码后的向量唯一,限制\boldsymbol{D}的每一列向量都是单位向量。对\boldsymbol{D}做了这个限制后计算最优的\boldsymbol{D}就比原来简单很多。

PCA需要同时求出优秀的\boldsymbol{D}\boldsymbol{c},同时求两个毫不相干的最优解求不出来,我们是否可以先保持一个变量\boldsymbol{D}不变,求出最优的\boldsymbol{c},如果最优的\boldsymbol{c}可以用\boldsymbol{D}表示,那么进而再去求\boldsymbol{D},这是被证明有效的行得通的方法。我们按照这个想法往下走

最小化原向量\boldsymbol{x}和经过编码以及解码后的向量g(\boldsymbol{c})的欧式距离来求解最优的\boldsymbol{c},式子如下: 

式子里的欧式距离可以转换成矩阵形式:

然后根据矩阵的分配律将这个欧式距离展开:

因为\boldsymbol{x}^{T}g(\boldsymbol{c}) 和 g(\boldsymbol{c})^{T}\boldsymbol{x} 相等,都是一个实数,将欧式距离化简得:

将化简后的欧式距离带入最初的式子,并且省略掉\boldsymbol{x}^{T}\boldsymbol{x}一项(因为与优化无关),得:

将 g(\boldsymbol{c}) 换成 \boldsymbol{D} (\boldsymbol{D}被限制列相互线性独立并且都是单位向量,所以\boldsymbol{D^{T}}\boldsymbol{D}=\boldsymbol{I_{l}}):

 因为任何矩阵乘单位矩阵不会发生改变,得:

 我们运用矩阵微积分运算对 \boldsymbol{c} 进行求导,令导数为0 ,我们得到:

 我们已经求出最优的\boldsymbol{c}啦,因为f(\boldsymbol{x})=\boldsymbol{c},所以:

接下来我们求最优的\boldsymbol{D}

,其中f(\boldsymbol{x})=\boldsymbol{c}g(\boldsymbol{c})=\boldsymbol{D}\boldsymbol{c},所以有

最优的 \boldsymbol{D} 可以用下述来表示:

其中\boldsymbol{x}^{(i)}表示第i个样本,\boldsymbol{x}^{(i)}_{j}表示第i个样本的第j维数值。因为我们不只是针对n维空间里的一个向量优化,我们要对n维空间里的所有向量进行优化。

把欧式距离 转化成 欧式距离 的平方(不改变优化);并从 l=1开始优化(我们这里先证明l=1的情况,然后推导 l\geq 2的情况),此时 \boldsymbol{D}  就变成了一个向量,我们记做 \boldsymbol{d} ,则:

因为 \boldsymbol{d}^{T}\boldsymbol{x}^{(i)}  是个实数,所以我们可以把 \boldsymbol{d}^{T}\boldsymbol{x}^{(i)} 移动到向量\boldsymbol{d}的左边:

我们把\boldsymbol{x}^{(i)}\boldsymbol{d}^{} 看成一个整体, 由于 \boldsymbol{d}^{T}\boldsymbol{x}^{(i)}\boldsymbol{d}^{}是一个实数,实数的转置还是自己,所以:

我们可以把 \sum  消掉,设\boldsymbol{X}\in \mathbb{R}^{m\times n} 且\boldsymbol{X}_{i,:}=\boldsymbol{x}_{(i)}^{T} ,用我们先前讲的Frobenius norm可得:

我们先不管限制项\boldsymbol{d}^{T}\boldsymbol{d}=1,把前边的式子化简成矩阵形式,用到我们先前讲的知识点可以得到:

然后我们将矩阵相乘展开:

 我们用先前讲的Tr(\boldsymbol{AB})=Tr(\boldsymbol{BA}) (把\boldsymbol{X}^{T}\boldsymbol{X}当作\boldsymbol{A}\boldsymbol{d}\boldsymbol{d}^{T}当作\boldsymbol{B}) 可得:

同理,我们这次把\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d}\boldsymbol{d}^{T}当作\boldsymbol{A}\boldsymbol{d}\boldsymbol{d}^{T}当作\boldsymbol{B}可得:

不要忘了我们还有一个限制,\boldsymbol{d}^{T}\boldsymbol{d}=1,代入可得到: 

  先前讲的Tr(\boldsymbol{AB})=Tr(\boldsymbol{BA}) ,(把\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d}当作\boldsymbol{A}\boldsymbol{d}^{T}当作\boldsymbol{B}) 可得:

因为 \boldsymbol{d}^{T}\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d} 是个实数,可以把前边的Tr去掉:

=argmax_{d} (\boldsymbol{d}^{T}\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d})  subject to \boldsymbol{d}^{T}\boldsymbol{d}=1

到现在为止,已经化简到我们想要的形式了,\boldsymbol{X}^{T}\boldsymbol{X}是一个实对称矩阵,  所以能进行特征分解,所以能使 \boldsymbol{d}^{T}\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d} 达到最大的 \boldsymbol{d} 是\boldsymbol{X}^{T}\boldsymbol{X}的最大特征值对应的特征向量。

我们证明证明的是 l=1的特殊情况,当l = 2时,\boldsymbol{D}=[\boldsymbol{d}_{1},\boldsymbol{d}_{2} ] ,我们不难推出:

\boldsymbol{D}^{*}=argmax_{d1,d2} (\boldsymbol{d}_{1}^{T}\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d}_{1} + \boldsymbol{d}_{2}^{T}\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d}_{2} )subject to \boldsymbol{d}_{1}^{T}\boldsymbol{d}_{1}=1 , \boldsymbol{d}_{2}^{T}\boldsymbol{d}_{2}=1 

 使 \boldsymbol{d}_{1}^{T}\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d}_{1} 达到最大的 \boldsymbol{d}_{1} 是\boldsymbol{X}^{T}\boldsymbol{X}的最大特征值的特征向量。 

\boldsymbol{d}_{1}^{T}\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d}_{1}达到最大的基础上求最优的\boldsymbol{d}_{2},使\boldsymbol{d}_{2}^{T}\boldsymbol{X}^{T}\boldsymbol{X}\boldsymbol{d}_{2} 达到最大的\boldsymbol{d}_{2} 是\boldsymbol{X}^{T}\boldsymbol{X}的次大特征值的特征向量。

 当l>2时,和等于2时是一样的道理。

PCA去中心化

在数学证明过程中,我们只需要求\boldsymbol{X}^{T}\boldsymbol{X}的前 l 大特征值对应的特征向量就好了。但是有一个问题我们不得不考虑,那就是每一维数据的量纲差别大的问题。如果数据其中某一特征(矩阵的某一列)的数值特别大,那么它在整个误差计算的比重上就很大,最小化误差的过程中,就会忽略数值比较小的特征,在PCA前我们并不知道每个特征的重要性,这很可能导致了大量的信息缺失。所以去中心化是必要的。

去中心化后指的是:矩阵中每列各个数据要减去这列的平均值然后和这列标准差做商,即:

x_{ij}^{*}=\frac{x_{ij}-\bar{x_{j}}}{\sqrt{s_{jj}}}

其中: \bar{x_{j}}=\frac{1}{m}\sum_{i=0}^{m}x_{ij}

        s_{jj}=\frac{1}{m-1}\sum_{i=1}^{m}(x_{ij}-\bar{x_{j}})^{2}

假设去中心化后的矩阵是\boldsymbol{Y},那么协方差矩阵就是\frac{1}{m-1}\boldsymbol{Y}^{T}\boldsymbol{Y},那么PCA就是求 \frac{1}{m-1}\boldsymbol{Y}^{T}\boldsymbol{Y} 的前 l 大特征值对应的特征向量。

基于奇异值分解的计算方法

传统的主成分分析通过数据的协方差矩阵的特征值分解进行,现在常用的方法是通过数据矩阵的奇异值分解进行。

通过数据的协方差矩阵的特征值分解求主成分就不多讲了,我们讲讲通过奇异值分解的方法求主成分。奇异值分解可参考奇异值分解(SVD)(Singular Value Decomposition)

我们知道,对 m\times n 的实矩阵 \boldsymbol{A} ,假设其秩为 r ,0<k<r,则可将矩阵 \boldsymbol{A} 进行截断奇异值分解:

\boldsymbol{A_{m\times n}} \approx \boldsymbol{U}_{m\times k}\boldsymbol{D}_{k\times k}\boldsymbol{V}_{n\times k}^{T}

 定义一个新的 m\times n 矩阵  \boldsymbol{X}^{'} 

\boldsymbol{X}^{'}=\frac{1}{\sqrt{m-1}}\boldsymbol{Y}  (\boldsymbol{Y}是去中心化后的矩阵)

那么 \boldsymbol{X}^{'T}\boldsymbol{X}^{'}=(\frac{1}{\sqrt{m-1}}\boldsymbol{Y})^{T}(\frac{1}{\sqrt{m-1}}\boldsymbol{Y})=\frac{1}{m-1}\boldsymbol{Y}^{T}\boldsymbol{Y}

记协方差矩阵 \boldsymbol{X}^{'T}\boldsymbol{X}^{'} 为 S_{\boldsymbol{X}}

主成分分许归结于求协方差矩阵S_{\boldsymbol{X}}的特征值和对应的单位特征向量,也就是求矩阵\boldsymbol{X}^{'T}\boldsymbol{X}^{'} 的特征值和对应的单位特征向量。

假设\boldsymbol{X}^{'}的截断奇异值分解为\boldsymbol{X}^{'}\approx \boldsymbol{U}_{m\times k}\boldsymbol{D}_{k\times k}\boldsymbol{V}_{n\times k}^{T} ,那么 \boldsymbol{V} 的列向量就是 \boldsymbol{X}^{'T}\boldsymbol{X}^{'} 的前 k 主成分。于是,求\boldsymbol{X}^{'T}\boldsymbol{X}^{'}的特征值特征向量可以通过求\boldsymbol{X}^{'}的奇异值分解来实现。

结论

PCA是一种降维方法。取\boldsymbol{X}的协方差矩阵 \frac{1}{m-1}\boldsymbol{Y}^{T}\boldsymbol{Y} 的前 l 大特征值对应的特征向量,将这些特征向量拼起来作为各个列 得到 解编码矩阵\boldsymbol{D} 。编码矩阵是\boldsymbol{D}^{T}

实现方法可对原数据矩阵的协方差矩阵求特征分解,也可对去中心化后的原数据矩阵求奇异值分解。

呼,终于完事啦~

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值