算法的目标
主成分分析(PCA)算法的目标是将一组p维的样本数据降为d维;需要满足两个条件:
- 样本数据各点与其映射到d维中的点的距离尽量近。
- 样本数据映射到d维之后,他们的投影之间的相互距离尽可能远。
(其实这两个条件是等价的。)
举个例子,如果p=2,d=1,则PCA算法可以由下图表示:
算法的步骤
- 对所有的样本进行中心化操作,如果有m个样本数据,中心化操作如下:
- 计算样本矩阵X的协方差矩阵,并做特征值分解。
- 取最大的d个特征值所对应的特征向量作为维度变换的投影矩阵W*。所以PCA算法的结果为:
解释和证明
为什么要对输入数据进行中心化操作呢?
很显然,我们求协方差的时候,先会将每个样本减去平均值,再进行取平方再平均的运算。中心化的操作可以看成求协方差的一部分。如果没有进行中心化操作,效果可以见https://blog.csdn.net/fisherming/article/details/80236631。
为什么计算样本的协方差矩阵,并做特征值分解?
这就是PCA的核心证明问题了,有一定的数学功底而且想弄明白PCA算法原理的读者可以往下继续看。
首先,设降维映射后的坐标系的标准正交基为:
这里要解释一下,如果我们输入的样本是在普通的p维直角坐标系下表示的,那么降维变换后,映射到新的d为空间很有可能不是与以前的p维空间的某d和坐标轴重合,通俗的讲,这个d维空间往往是个斜的,就像把2维的数据映射到1维的直线的那个图一样,直线是斜的。所以就需要d为空间的基进行变换,从而达到用d维的数据就可以进行表示的目的。
所以,降维变换之后的一个d维向量可以表示为z(z1,z2,…,zd)。注意这个坐标的基已经进行了变换。所以:
(1) 考虑样本数据各点与其映射到d维中的点的距离尽量近
我们这时候要算降维变换前后对应点之间的距离,将其最小化就好了。可是我们发现降维变换前后的维度都不一样了,该如何算距离呢?这时我们要将降维变换后的坐标反变换回原来的p维空间内就好了。计算操作如下:
所以所有降维变换前后的样本点之间的对应欧式距离就可以计算了,计算公式如下:
上式应该被最小化,化简的步骤参照南瓜书,我就直接贴图了:
所以PCA算法让我们转换成了一个典型的最优化问题:
(2) 考虑样本数据映射到d维之后,他们的投影之间的相互距离尽可能远
换成数学语言描述这个条件,就可以描述为最大化类内方差。也就是降维变换之后,使得样本在各个维度的方差最大化。这个思路似乎可以更简单的用数学表达式来描述。如果降维映射的标准正交基组成的矩阵为W,则:
所以也可以转化成一个典型的最优化问题:
我们可以发现,和(1)中的结果是等价的。
求解此最优化问题的步骤参照南瓜书,我这里也直接贴图了:
学过线性代数的同学就会发现,证明的结果就是输入样本协方差矩阵的特征向量的定义式。所以我们需要计算协方差矩阵并对协方差矩阵进行特征值分解。
为什么要取最大的d个特征值所对应的特征向量作为维度变换的投影矩阵?
如果我们将原先的p为向量降维到d维,则需要取最大的d个特征值对应的特征向量构成d维空间的基向量,证明如下:
降维后的损失
既然是数据降维,就不可避免的损失一些东西。那么如何衡量损失的大小呢?可以通过特征值分解后最大的d个特征值之和与所有p个特征值之和的比值来反映损失的大小,即:
参考文献
《机器学习》周志华
https://datawhalechina.github.io/pumpkin-book/#/
转载:https://blog.csdn.net/Andy123321aa/article/details/102485750