机器学习算法原理篇之PCA主成分分析

首先要特别感谢刘建平Pinard老师(https://www.cnblogs.com/pinard/),刘建平Pinard老师是个大神,本文是在他 主成分分析(PCA)原理总结 这篇博文的基础上加了一些自己的理解以及部分细节的推导而成。

1. PCA概述

1.1 什么是主成分分析?

主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。主成分分析的好处是使要分析的数据的维度降低了,但是数据的主要信息还能保留下来,并且,这些变换后的维两两不相关

1.2 PCA的思想

对于任意给定的一组多维数据,它所代表的信息量是一定。数据代表的信息总量等于数据在各位维度分量上的信息之和,而与所选取的坐标系无关。但是同一组数据在维数相同的不同的坐标系下,各维度所代表的信息量的分布却存在差异。主成分分析的目的是通过转换坐标空间,使得数据所代表的的信息尽可能集中地分布在较少数量的维度上,从而可以只选择占有较多信息的坐标维度,达到数据降维的目的

PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。具体的,假如我们的数据集是n维的,共有m个数据。我们希望将这m个数据的维度从n维降到n'维,希望这m个n'维的数据集尽可能的代表原始数据集。我们知道数据从n维降到n'维肯定会有损失,但是我们希望损失尽可能的小。

我们先看看最简单的情况,也就是,,也就是将数据从二维降维到一维。数据如下图。我们希望找到某一个维度方向,它可以代表这两个维度的数据。

机器学习算法原理篇之PCA主成分分析_第1张图片
二维数据方向

接下来,我们面临两个问题:

  • 如何找到最优的维度方向?

    对于这点,我想好多人都有经验,这不就是以前用最小二乘法拟合数据时做的事情吗!对,最小二乘法求出来的直线(二维)的方向就是的方向!那的方向呢?因为这里是二维情况,所以方向就是跟垂直的方向,对于高维数据,怎么知道、的方向?
  • 为什么最优维度方向比其它方向好?

    从直观上也可以看出,比好。为什么比好呢?可以有两种解释,第一种解释是样本点到这个直线的距离足够近,第二种解释是样本点在这个直线上的投影能尽可能的分开

2. PCA推导

如何找到最优维度方向是主成分分析要解决的问题,对于维度方向优劣的衡量指标可以从上节问题二得到启发,这里我们主要从第二种解释入手,即对样本点在这个直线上的投影能尽可能的分开来量化。我们知道方差一定程度上反映了数据的分散程度,而数据分散程度从一定程度也代表了数据所携带的信息量,因此我们可以考虑比较数据在不同维度上的投影方差来选择最优维度方向。

2.1 PCA推导:基于最大投影方差

假设给定m个n维数据,投影变换后新的坐标系空间为

2.1.1 数据中心化

一方面,不同特征量纲的差异会导致不同特征的方差存在先天差异,而数据中心化在一定程度上可以消除这种先天差异;另一方面数据中心化不会改变数据本身的形状,但可以大大降低计算量。数据中心化具体操作如下:

其中,从而

变换坐标空间,数据在新坐标系W下的坐标如下:

样本点在新的坐标系中的坐标为

则数据在新坐标空间下也是中心化的,具体如下:

其中

2.1.2 求解第一主轴(投影方差最大的维度方向)

不失一般性,假设为第一主轴方向,由于数据在轴下是中心化了的,因此样本数据在上的均值为0,即样本数据在轴的投影方差表达式如下:

由于求和项与无关,所以

注意,其实括号里面是一个矩阵乘以自身的转置,即:

所以

如果没有前面的1/n,那就是就是一个标准的二次型!可以证明为一个半正定矩阵(证明略:证明所有特征值大于等于0即可),半正定矩阵存在最大值!

到此,主轴投影方差最大化问题可以抽象为以下模型:

2.1.3 模型求解

  • 方法1:拉格朗日乘数法

    等式约束的极值问题可以通过拉格朗日乘数法求解,构造拉格朗日函数如下:

    上式对求导(涉及到矩阵求导的相关知识,请自行补充相关的知识点)如下:







    显然,即为特征值对应的特征向量!的所有特征值和特征向量都满足上式,那么将上式代入目标函数表达式即可得到

    所以,第一主轴方向即为第一大特征值对应的特征向量方向。第二主轴方向为第二大特征值对应的特征向量方向,以此类推,证明类似。
    求出之后,顺序可求得相应的坐标维度,具体策略如下:
    1)对于重根,对应的特征向量需要先进行Schimidt正交,然后再进行单位化;
    2)对于单根,对应的特征向量直接进行单位化即可;

  • 方法2:奇异值法
    具体见引用文章2

2.2 PCA推导:基于小于投影距离

具体见引用文章1

3. PCA算法流程

从上面两节我们可以看出,求样本的维的主成分其实就是求样本集的协方差矩阵(注意协方差矩阵只和隔了1/m)的前n'个特征值对应特征向量矩阵,并将其标准正交化,得到正交矩阵W,然后对于每个样本,做如下变换,即达到降维的PCA目的。

下面我们看看具体的算法流程。
输入:n维样本,要降维到的维数
输出:降维后的n维样本

  1. 对所有的样本进行中心化:
  2. 计算样本的协方差矩阵
  3. 求解矩阵的特征值、
  4. 取出最大的n'个特征值对应的特征向量(w1,w2,...,wn′), 将所有的特征向量标准化后,组成特征向量矩阵W。
  5. 对样本集中的每一个样本,转化为新的样本
  6. 得到输出样本集

有时候,我们不指定降维后的n'的值,而是换种方式,指定一个降维到的主成分比重阈值t。这个阈值t在(0,1]之间。假如我们的n个特征值为λ1≥λ2≥...≥λn,则n'可以通过下式得到:

4. PCA算法总结

这里对PCA算法做一个总结。作为一个非监督学习的降维方法,它只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。为了克服PCA的一些缺点,出现了很多PCA的变种,比如为解决非线性降维的KPCA,还有解决内存限制的增量PCA方法Incremental PCA,以及解决稀疏数据降维的PCA方法Sparse PCA等。

  • 优点
    1. 仅仅需要以方差衡量信息量,不受数据集以外的因素影响。
    2. 各主成分之间正交,可消除原始数据成分间的相互影响的因素。
    3. 计算方法简单,主要运算是特征值求解,易于实现。
  • 缺点
    1. 主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
    2. 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。

5. 参考文章

1. 刘建平-主成分分析(PCA)原理总结
2. 止战-主成分分析(PCA)原理及推导
3. 倚楼-矩阵求导浅析(一)

你可能感兴趣的:(机器学习算法原理篇之PCA主成分分析)