PCA(Principal Component Analysis)的主要应用场景是:在大数据集中找出关键的信息并剔除冗余的信息。根据这个特性,PCA也可以用来做信息压缩(有损)、特征提取。不过在本文中,只会对PCA的数学原理进行阐述。
另外,PCA可以说是Machine Learning领域的自编码机(AutoEncoder,AE)的基础。主要区别在于,PCA是线性算法,而AE则不一定。所以在学习AutoEncoder之前,有必要先将PCA搞清楚。
Part I
设向量\( \vec x \)表示对某个特征的n次采样(测量), 那么如果有m个不同的特征,就组成了一个\(m\times n \)的矩阵\( X \):
\[ X = \left[ \begin{matrix} \vec x_{1}\\ \vec x_{2}\\ \vdots \\ \vec x_{m}\\ \end{matrix} \right] \]
然后问题来了:每个特征之间是否是相互独立(independant)的?如果是,那么说明这m个特征是良好的,可以直接拿去应用到任务中(譬如基于这些特征做一个分类器);如果不是,那么就说明有特征是多余的,譬如\( \vec x_{a} \)、\( \vec x_{b} \)分别用米和英尺记录了同一个特征,虽然数值不一样,然而并没有什么卵用。
量化特征与特征之间的关系的最好办法是用方差(Variance)和协方差(Covariance),这2者又共同涉及到了更基础的概念数学期望(Expected Value)和均值(Mean)。先简单过一遍这4个东西的公式。
数学期望和均值
数学期望公式:
\[ E[\vec x] = \sum _{i=1}^{n}x_{i}p_{i} \]
当每个\( x_{i} \)的出现概率相等时(均匀分布),有\( p_{i} = \frac {1}{n} \),所以上式可简化成:
\[ E[\vec x] = \frac {1}{n}\sum _{i=1}^{n }x_{i} \]
上式其实也就是均值\( \overline {x} \)的定义,所以当\(x_{i}\)均匀分布时,有:
\[ E[\vec x] = \overline {x} \]
有时候也用\( \mu \)来指代Mean。
方差和协方差
方差:
\[ Var(\vec x) = E[ (\vec x - E[\vec x])^{2 } ] = E[ (\vec x - E[\vec x])(\vec x - E[\vec x]) ] \]
协方差:
\[ Cov(\vec x, \vec y) = E[ (\vec x - E[\vec x])(\vec y - E[\vec y]) ] \]
可以发现方差是协方差的特殊情况:
\[ Var(\vec x) = Cov(\vec x, \vec x) \]
协方差矩阵
在线性代数之各种各样的矩阵最后面已经提到了协方差矩阵(Covariance matrix):
\[ C = \left[ \begin{matrix} E[(\vec x_{1} - \mu_{1})(\vec x_{1} - \mu_{1})]& E[(\vec x_{1} - \mu_{1})(\vec x_{2} - \mu_{2})]& \cdots & E[(\vec x_{1} - \mu_{1})(\vec x_{m} - \mu_{m})]\\ E[(\vec x_{2} - \mu_{2})(\vec x_{1} - \mu_{1})]& E[(\vec x_{2} - \mu_{2})(\vec x_{2} - \mu_{2})]& \cdots & E[(\vec x_{2} - \mu_{2})(\vec x_{m} - \mu_{m})]\\ \vdots & \vdots & \ddots & \vdots \\ E[(\vec x_{m} - \mu_{m})(\vec x_{1} - \mu_{1})]& E[(\vec x_{m} - \mu_{m})(\vec x_{2} - \mu_{2})]& \cdots & E[(\vec x_{m} - \mu_{m})(\vec x_{m} - \mu_{m})]\\ \end{matrix} \right] \]
当Mean等于0时的情况
当Mean等于0时,上面的协方差矩阵变成:
\[ C = \left[ \begin{matrix} E[\vec x_{1}\vec x_{1}]& E[\vec x_{1} \vec x_{2}]& \cdots & E[\vec x_{1}\vec x_{m}]\\ E[\vec x_{2}\vec x_{1}]& E[\vec x_{2}\vec x_{2}]& \cdots & E[\vec x_{2}\vec x_{m}]\\ \vdots & \vdots & \ddots & \vdots \\ E[\vec x_{m}\vec x_{1}]& E[\vec x_{m}\vec x_{2}]& \cdots & E[\vec x_{m}\vec x_{m}]\\ \end{matrix} \right] \]
再假设\( \vec x \)每个分量的取值是均匀分布的,那么根据上面的定义,有:
\[E[\vec x_{a}\vec x_{b}] = \frac {1}{n}\sum _{i=1}^{n} \vec x_{ai}\vec x_{bi} , 1 \leq a\leq m, 1 \leq b\leq m \]
代入上式,得到:
\[ C = \frac {1}{n} \left[ \begin{matrix} \sum _{i=1}^{n} \vec x_{1}\vec x_{1}& \sum _{i=1}^{n} \vec x_{1}\vec x_{2}& \cdots & \sum _{i=1}^{n} \vec x_{1}\vec x_{m}\\ \sum _{i=1}^{n} \vec x_{2}\vec x_{1}& \sum _{i=1}^{n} \vec x_{2}\vec x_{2}& \cdots & \sum _{i=1}^{n} \vec x_{2}\vec x_{m}\\ \vdots & \vdots & \ddots & \vdots \\ \sum _{i=1}^{n} \vec x_{m}\vec x_{1}& \sum _{i=1}^{n} \vec x_{m}\vec x_{2}& \cdots & \sum _{i=1}^{n} \vec x_{m}\vec x_{m}\\ \end{matrix} \right] \]
再设一个矩阵X:
\[ X = \left[ \begin{matrix} \vec x_{1}\\ \vec x_{2}\\ \vdots \\ \vec x_{m}\\ \end{matrix} \right] \]
\[ X^{T} = \left[ \begin{matrix} \vec x_{1}& \vec x_{2}& \cdots & \vec x_{m}\\ \end{matrix} \right] \]
于是有:
\[ C = \frac {1}{n}XX^{T} \]
总结下,对符合均匀分布的、且均值等于0的\(\vec x_{i, 1\leq i \leq m}\),它的协方差矩阵如下:
\[ X^{T} = \left[ \begin{matrix} \vec x_{1}& \vec x_{2}& \cdots & \vec x_{m}\\ \end{matrix} \right] \]
\[ C = \frac {1}{n}XX^{T} \]
为了下文能继续推导,需要把C记为\( C_{x} \)。
PART II
根据上面得到的协方差矩阵的公式,可以知道:
\( C_{x} \)是一个对称方阵
\( C_{x} \)的对角线上的元素分别代表了对某个特征的n次测量的方差
\( C_{x} \)的非对角线上的元素代表了任意2个特征之间的协方差
开始进入到PCA的环节。PCA的目标是提炼出\( C_{x} \)的关键信息并剔除冗余信息,这个过程用线性代数表示就是:
\[ Y = PX \]
这里面P就是我们需要的目标矩阵。而关于矩阵Y的协方差矩阵\( C_{y} \)的特性是:
\( C_{y} \)的对角线上的元素(方差)尽可能大(增大信号)
\( C_{y} \)的非对角线上的元素(协方差)应该等于零,因此\( C_{y} \)还是一个对角线矩阵
\( C_{x} \)、\( C_{y} \)、P的关系是:
\[ C_{y} = \frac {1}{n}YY^{T} \]
\[ = \frac {1}{n}(PX)(PX)^{T} \]
\[ = \frac {1}{n}PXX^{T}P^{T} \]
\[ = P(\frac {1}{n}XX^{T})P^{T} \]
\[ = PC_{x}P^{T} \]
即:
\[ C_{y} = PC_{x}P^{T} \]
PCA的求解方法多种多样,下面展示最经典的解法——特征值分解。
基于特征值分解的PCA
在矩阵的特征值、特征向量、特征矩阵、迹、特征值分解一文中提到了对称方阵的特征值分解公式:
\[ A = S\Lambda S^{-1} = S\Lambda S^{T} \]
矩阵\( \Lambda \)是对角矩阵,对角线上的元素为特征值;矩阵S是一个行向量为特征向量的矩阵,\( S^{-1} = S^{T} \)。
有了这个公式后,立即可以知道对称矩阵\( C_{x} \)的特征值分解(对角化)为:
\[ C_{x} = S\Lambda S^{T} \]
将其代入上面的公式,有:
\[C_{y} = PS\Lambda S^{T}P^{T} \]
这里可以大胆做个假设:\( P \equiv S^{T} \)。又因为 \( S^{-1} = S^{T} \), 则有:
\[ P^{-1} = (S^{T})^{-1} = (S^{-1})^{-1} = S = P^{T} \]
所以:
\[ C_{y} = PS\Lambda S^{T}P^{T} = PP^{T} \Lambda PP^{T} = PP^{-1} \Lambda PP^{-1} = \Lambda \]
总结:
当\( P \)(主成分矩阵)是\( C_{x} \)的特征向量矩阵\( S \)时,\( C_{y} \)是特征值矩阵\( \Lambda\)。
基于奇异值分解的PCA
关于SVD的讨论我都会追加线性代数之奇异值(SVD)分解一文中,在这里不展开对SVD的详细讨论。
SVD分解公式:
\[ M = UΣV^{*} \]
(其中各个矩阵的含义就不赘述了)
和PCA最相关的SVD其中一条性质:
\[ M^{*}M = V\Sigma ^{*}U^{*}U\Sigma V^{*} = V\Sigma ^{*}(U^{*}U)\Sigma V^{*} = V\Sigma ^{*}\Sigma V^{*} = V(\Sigma ^{*}\Sigma )V^{-1} \]
当元素是实数时,有:
\[ M^{T}M = V(\Sigma ^{T}\Sigma )V^{-1} \]
注意,这个公式包含了一个事实:\( M^{T}M \)的特征值分解等于\( V(\Sigma ^{T}\Sigma )V^{-1} \)。
现在,假设有一个矩阵Y,Y满足:
\[ Y = \frac { 1 }{ \sqrt {n} }X^{T} \]
那么有:
\[ Y^{T}Y = (\frac { 1 }{ \sqrt {n} }X^{T})^{T}\frac { 1 }{ \sqrt {n} }X^{T} \]
\[ = \frac { 1 }{ \sqrt {n} }\frac { 1 }{ \sqrt {n} } (X^{T})^{T}X^{T} \]
\[ = \frac { 1 }{ n }XX^{T} \]
\[ = C_{x} \]
而Y的SVD分解为:
\[ Y = UΣV^{*} \]
所以有:
\[ Y^{T}Y = V(\Sigma ^{T}\Sigma )V^{-1} = C_{x} \]
这时候事情又和特征值分解联系上了,在上一小节我们已经知道当\( P \)是\( C_{x} \)的特征向量矩阵\( S \)时,\( C_{y} \)是特征值矩阵\( \Lambda\),而在这个式子中,\(V\)就是\( C_{x} \)的特征向量矩阵!
整理一下这个解法的思路:
先设\( Y = \frac { 1 }{ \sqrt {n} }X^{T} \)
对矩阵Y做SVD分解,得到矩阵V,V就是关于X的主成分矩阵
参考资料
A Tutorial on Principal Component Analysis, Jonathon Shlens
写作不易,您的支持是我写作的动力!