利用PAC进行图像识别(一)


PCA计算步骤


开始之前先列出PCA的计算步骤,之后对步骤进行说明。

  1. 将原始数据按列组成n行m列的矩阵X(注:n代表了特征维数;m代表了数据条数;为什么使用列向量表示一条数据:使用列向量使得在之后的矩阵相乘时更加方便,并且符合数学公式的表达方式,比如第6条中 Y = HX,其表示将X表示的数据降维到k维,即将X投影到H表示的空间中,线性代数中一般均采用左侧为待投影空间矩阵的方式)
  2. 将X的每一行减去对应行的均值(注:这一过程称为:零均值化)
  3. 求出X的协方差矩阵C,即 X 乘 X转置(注:虽然称为协方差矩阵,但是实际并没有除以数据条数来取平均,因为这样做也没什么用处)
  4. 求出协方差矩阵的所有特征值和对应的特征向量(注:该协方差矩阵是实对称矩阵,因此所有特征值均是实数,这就保证了之后能够根据特征值大小来对特征向量进行排序)
  5. 将特征向量按照其对应的特征值由大到小的顺序排列,去前k个组成矩阵H(注:k表示要将原来的矩阵X降维到k维)
  6. Y = HX ,得到的Y即表示X降维到k维后的数据(注:从这里也可以看出,对于两个矩阵相乘的本质,一种解释方法就是:右侧矩阵所代表的空间中的点投影到左侧矩阵所代表的的空间中)

PCA原理

为什么要提出PCA

首先,PCA是一种数据降维方法。

在机器学习中,很多情况下要处理的数据维数很高,甚至达到上万维,这种情况下机器学习要消耗大量的资源,有时设备无法支持,或者时间不允许,就必须对数据进行降维处理

降维原则1:维度间相关性尽可能小

通过降维,希望能够去除一些没有用的数据,如相关性较大的数据。比如说一个数据集,有两列分别表示“男”,“女”,那么当一条数据中“男”是1,则“女”一定是0,这样的特征之间带有极强的相关性。在这种情况下,将“男”或者“女”去掉实际上没有任何信息损失。当然这是一种极端的情况。但是诸如网店数据中“下单数”和“成交单数”具有较强的相关关系,必要时二者取其一即可。

降维原则2:维度内各数据间分散程度尽可能大

降维就意味着信息的丢失,因此在降维过程中要尽量使信息的损失降到最低。如何保证?

假设我们有两个数据集,每个数据集均有两个特征。将这两个数据集表示在二维坐标系上如 图1 图2 所示。

下面对这两个数据集进行降维处理,缩放到一维。直观来看,如果缩放到一维,图1明显将其投影到x1轴最好。图2明显将其投影到x2轴最好,这样能够使得数据尽可能分散,越分散保留的信息越多。

降维的目的与原则

降维的目的是减少数据维数,其原则是使得保留下来的维度之间的相关性尽可能小维度内的分散程度尽可能大

保证两条原则的解决方法:协方差矩阵

怎样知道维度间相关性和维度内的分散程度(分散程度很自然使用方差描述)呢?答案是协方差矩阵!协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。协方差矩阵的主对角线上的元素是各个维度上的方差,其他元素是两两维度间的协方差(即相关性)

  • 对于原则1:维度间相关性尽可能小,翻译一下:协方差矩阵的非对角线元素之和最小。可以通过使协方差矩阵中非对角线元素都为0来实现。实现这一目的的方法就是:矩阵对角化

  • 对于原则2:维度内数据间分散程度尽可能大,翻译一下:协方差矩阵的对角线元素之和最大。通过对协方差矩阵对角化,我们得到对角矩阵,并且该对角矩阵对角线元素是协方差矩阵的特征值。因协方差矩阵是方阵,因此协方差矩阵的n个特征值之和等于协方差矩阵的对角线元素之和即各个维度的方差之和,由于我们是要降维(假设降到k维),因此我们只能取k个特征值作为新空间的基。如何保证各个维度方差之和最大?显然是要取最大的k个特征值

PCA步骤解释

  1. 将原始数据按列组成n行m列的矩阵X

    解释:没有啥可解释的,基本操作。

  2. 将X的每一行减去对应行的均值

    解释:这是为了在求协方差矩阵的时候方便,因为方差和协方差都有 【x - E(x)】一项,提前处理之后直接使用矩阵乘法即可。

  3. 求出X的协方差矩阵C,即 X 乘 X转置

    解释:没有啥可解释的,基本操作。

  4. 求出协方差矩阵的所有特征值和对应的特征向量

    解释:没有啥可解释的,基本操作。

  5. 将特征向量按照其对应的特征值由大到小的顺序排列,去前k个组成矩阵H(注:k表示要将原来的矩阵X降维到k维)

    解释:排序就是为了方便取前k个特征值,矩阵H所代表的就是降维后的空间。

  6. Y = HX ,得到的Y即表示X降维到k维后的数据

    解释:将X降维到H所表示的空间中。

为什么要使用协方差矩阵的特征向量

协方差矩阵的特征向量表示的是什么?

  • 答:协方差矩阵的特征向量所表示的方向是数据变化最大的方向。

如上图所示,二维数据集的协方差矩阵经过计算后有两个特征向量u,v。其中,特征值大的对应的特征向量是u,小的对应的是v。因此,使用特征向量来作为降维后的基是合理的。

PCA简单实例

接下来使用PCA进行一个图片的简单操作,观察降维后的结果。

下面是测试图片,我们将该图片降维到一维。

在没有编写程序之前,讲过上面的分析,我们应该大体可以猜出来,结果大体应该是:

大体应该投影到红线表示的向量上。

下面是结果:

可以看到是符合预期的,这符合PCA降维的原则。

程序代码地址 欢迎点个star :https://github.com/kai123wen/PCALearn/tree/master/PCA_1

参考: