主成分分析(PCA) 学习笔记

主成分分析(PCA) 学习笔记

  • 前言
    • 1. PCA基本思想
    • 2. 协方差
    • 3. 协方差矩阵
    • 4. 协方差矩阵对角化
    • 5. 数据的降维
    • 6. PCA流程总结
    • 参考资料

前言

主成分分析(Principal Components Analysis)是一种常用的对高维数据降维的方法。通过PCA,我们可以在保留数据的主要信息的前提下将原始数据降维。数据的降维可以减少对数据分析及计算的成本。

1. PCA基本思想

PCA的主要思想就是将 n n n维的数据从原始空间转换到一个同样由n个正交基构成的新的空间,也就是新的坐标系。要得到这新的n个正交基,我们需要先找到第一个基,使得所有数据在这个基上的投影后的方差比在其他任何基上的投影后的方差都大。这个基的方向称为数据的第一主成分。第二个基在保证与第一个基正交的同时要使得所有数据在这个基上的投影后的方差比在除了第一个基的其他任何基上的投影后的方差都大。这个基的方向称为数据的第二主成分。类似地,剩下的基在保证与前面的基正交的基础上要使得所有数据在这个基上的投影后的方差比在除了前面选择过的基的其他任何基上的投影后的方差都大。这样我们就得到了这组数据的 n n n个主成分。根据实际需要,我们选择数据的前 k k k个主成分,这样就得到了降维后的 k k k维数据。

因为要保留原始数据的主要信息,所以转换后的数据在每个方向(新坐标系基的方向)要尽可能的分散(方差要大)。在新的坐标系下,如果数据在某个基上的投影比在其他基上的投影的方差都大,我们就把这个基的方向称为第一主成分。以此类推,我们可以通过剩下的基找出第二主成分到第k主成分。

2. 协方差

前面提到用k个正交基来构成新的空间,那么为什么一定要用正交基呢?这是因为PCA的主要目的是给数据降维,并且要保证降维后的数据尽量保持原有的特征,不希望对其他维度的数据特征产生影响,所以在新的基构成的空间中,应让数据各个维度的变量两两线性无关。当我们想去除数据某些主成分以实现降维时,降维后的数据在每个坐标轴(基)上的投影会保持不变。也就是说由于每个变量在新的空间下相互线性无关,降维不会牵连降维后数据各个维度的特征(变量的特征)。

为了实现消除各变量间的相关性,我们可以在数据变换到新的空间后使各变量间的协方差等于0。

下面是协方差公式:
C o v ( a , b ) = 1 m ∑ i = 0 m ( ( a i − μ a ) ( b i − μ b ) ) Cov(a,b) = \frac{1}{m}\sum_{i=0}^m((a_i-μ_a)(b_i-μ_b)) Cov(a,b)=m1i=0m((aiμa)(biμb))
其中 a i a_i ai b i b_i bi为第 i i i个数据的两个变量, m m m为数据的个数, μ a μ_a μa μ b μ_b μb分别为变量 a a a b b b的样本均值。

为了方便计算,我们将数据去中心化,即每个数据的变量都减去此变量的均值。此时,各变量的平均值就都变成了0。因此协方差公式可以写成:
C o v ( a , b ) = 1 m ∑ i = 0 m ( a i b i ) Cov(a,b) = \frac{1}{m}\sum_{i=0}^m(a_ib_i) Cov(a,b)=m1i=0m(aibi)

3. 协方差矩阵

现在假设我们的数据有两个变量 a a a b b b,我们用向量 ( a i b i ) \left(\begin{matrix}a_i\\bi\end{matrix}\right) (aibi)表示第 i i i个数据,将它们按列构成矩阵 X X X
X = ( a 1 a 2 ⋯ a m b 1 b 2 ⋯ b m ) X = \left( \begin{matrix} a_1 & a_2 & \cdots & a_m \\ b_1 & b_2 & \cdots & b_m \end{matrix} \right) X=(a1b1a2b2ambm)
那么
1 m X X T = ( 1 m ∑ i = 0 m a i 2 1 m ∑ i = 0 m a i b i 1 m ∑ i = 0 m a i b i 1 m ∑ i = 0 m b i 2 ) \frac{1}{m}XX^T = \left( \begin{matrix} \frac{1}{m}\sum_{i=0}^m a_i^2 & \frac{1}{m}\sum_{i=0}^m a_ib_i \\ \frac{1}{m}\sum_{i=0}^m a_ib_i & \frac{1}{m}\sum_{i=0}^m b_i^2 \end{matrix} \right) m1XXT=(m1i=0mai2m1i=0maibim1i=0maibim1i=0mbi2)
我们发现 1 m X X T \frac{1}{m}XX^T m1XXT的对角元素分别为变量 a a a b b b的方差,而剩下的两个元素为 a a a b b b的协方差。根据这个规律,我们可以把它推广到一般情况。

假设我们数据的维度为 n n n,变量值都为实数,每一个数据都用向量来表示,将它们按列构成矩阵 X X X,设 C = 1 m X X T C=\frac{1}{m}XX^T C=m1XXT,那么 C C C为实对称矩阵,它的对角元素分别为在当前空间下的各个变量的方差,对角线左下或右上元素为变量间的协方差。因此 C C C为在当前空间下数据的协方差矩阵

现在我们的目的就变成了找到一个由 n n n个正交基构成的新的空间,使得在数据从原始空间转换到新的空间后数据各个变量间的协方差等于0。

4. 协方差矩阵对角化

现在我们的目的就是将各个变量间的协方差化为0,而这等同于将数据的协方差矩阵化为对角矩阵。

X X X Y Y Y分为在原始空间与新空间下的数据按列构成的矩阵, C C C D D D分别为 X X X Y Y Y对应的协方差矩阵, P P P是一组维数为 n n n的基按行构成的矩阵, Y Y Y X X X通过 P P P转化到新的空间的数据,并且 D D D为对角矩阵,则
Y = P X Y = PX Y=PX
那么
D = 1 m Y Y T = 1 m ( P X ) ( P X ) T = 1 m P X X T P T = P ( 1 m X X T ) P T = P C P T \begin{aligned} D & = \frac{1}{m}YY^T \\ & = \frac{1}{m}(PX)(PX)^T \\ & = \frac{1}{m}PXX^TP^T \\ & = P(\frac{1}{m}XX^T)P^T \\ & = PCP^T \end{aligned} D=m1YYT=m1(PX)(PX)T=m1PXXTPT=P(m1XXT)PT=PCPT
显然地,我们现在的目的就是寻找一矩阵 P P P,使得矩阵 P C P T PCP^T PCPT是对角矩阵 D D D,并且对角矩阵D的对角元素从大到小从上到下依次排列, P P P也会随之改变。

由于矩阵C是实对称矩阵,所以存在正交矩阵 Q Q Q,使得
Q T C Q = Q − 1 C Q = D Q^TCQ = Q^{-1}CQ = D QTCQ=Q1CQ=D
其中 D D D的对角元素为 C C C的特征值, Q Q Q的每一列为 C C C的线性无关特征向量。因为实对称矩阵的特征向量都是正交的,所以我们只需将 C C C的线性无关特征向量规范化就能得到 C C C的单位正交特征向量组,将它们按列构成正交矩阵 Q Q Q

对比上述两个等式,我们可以得到
P = Q T P = Q^T P=QT
因此,我们就得到了矩阵 Y Y Y

5. 数据的降维

因为我们已经得到了满足条件的新空间下的数据,所以给数据降维就变得非常容易了。如果我们想要将 n n n维数据降到 k k k维( k < n kk<n),只需要将矩阵 Y Y Y的第 k + 1 k+1 k+1行到第 n n n行删除,得到的新矩阵的每一列就是降维后的数据。或者可以将P的前 k k k行保留得 P k P_k Pk,然后计算 Y r e d u c e = P k X Y_{reduce}=P_kX Yreduce=PkX,相比上面的方法,这样做的好处是可以减少计算量。

6. PCA流程总结

  1. 将所有数据用向量表示,并按列构成矩阵 X X X
  2. 将各个变量去中心化
  3. 求出协方差矩阵 C = 1 m X X T C = \frac{1}{m}XX^T C=m1XXT
  4. 求出 C C C的特征值及属于特征值的特征向量
  5. 将每个特征向量规范化
  6. 将特征值(方差)从上到下从大到小排列得到对角矩阵 D D D,并根据特征值的位置调整单位特征向量的位置,按行组成矩阵 P P P
  7. 通过 Y = P X Y = PX Y=PX得到新空间下的数据
  8. 设数据有 n n n个维度,删除矩阵 Y Y Y k + 1 k+1 k+1行到第 n n n行,实现从 n n n维降到 k k k维。

参考资料

  1. PCA的数学原理
  2. 【机器学习】降维——PCA(非常详细)

你可能感兴趣的:(数据分析,算法,机器学习)