机器学习PCA

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

2018-10-26  本文已影响39人  TuringWong

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

1. PCA概述

1.1 什么是主成分分析?

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

1.2 PCA的思想

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

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

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

二维数据方向

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

2. PCA推导

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

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

假设给定m个n维数据Y=(y_1,y_2,...,y_m),投影变换后新的坐标系空间为W=(w_1,w_2,...,w_n)

2.1.1 数据中心化

一方面,不同特征量纲的差异会导致不同特征的方差存在先天差异,而数据中心化在一定程度上可以消除这种先天差异;另一方面数据中心化不会改变数据本身的形状,但可以大大降低计算量。数据中心化具体操作如下:
X=(x_1,x_2,...,x_m)=(y_1-\mu,y_2-\mu,...,y_m-\mu)
其中\mu=\frac{1}{m}\sum_{i=1}^{m}y_i,从而\sum_{i=1}^{m}x_i=0

变换坐标空间,数据在新坐标系W下的坐标如下:
W^TX=(W^Tx_1,W^Tx_2,...,W^Tx_m)
样本点x_i在新的坐标系中的坐标为z_i=(w_1^Tx_i,w_2^Tx_i,...,w_n^Tx_i,)

则数据在新坐标空间下也是中心化的,具体如下:
\sum_{i=1}^{m}w_j^Tx_i=w_j^T\sum_{i=1}^{m}x_i=0
其中j={1,2...,n}

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

不失一般性,假设w_1为第一主轴方向,由于数据在w_1轴下是中心化了的,因此样本数据在w_1上的均值为0,即样本数据在w_1轴的投影方差表达式如下:
Var_{w_1}=\frac{1}{m}\sum_{i=1}^{m}(w_1^Tx_i)^2=\frac{1}{m}\sum_{i=1}^{m}x_i^Tw_1w_1^Tx_i=\frac{1}{m}\sum_{i=1}^{m}w_1^Tx_ix_i^Tw_1
由于求和项与w_1无关,所以
Var_{w_1}=\frac{1}{m}w_1^T(\sum_{i=1}^{m}x_ix_i^T)w_1
注意,其实括号里面是一个矩阵乘以自身的转置,即:
\sum_{i=1}^{m}x_ix_i^T=XX^T
所以
Var_{w_1}=\frac{1}{m}w_1^TXX^Tw_1
如果没有前面的1/n,那就是就是一个标准的二次型!可以证明XX^T为一个半正定矩阵(证明略:证明所有特征值大于等于0即可),半正定矩阵存在最大值!

到此,主轴投影方差最大化问题可以抽象为以下模型:
max Var_{w_1}=w_1^TXX^Tw_1\\ s.t. w_1^Tw_1=1

2.1.3 模型求解

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

具体见引用文章1

3. PCA算法流程

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

下面我们看看具体的算法流程。
输入:n维样本D=(x_1,x_2,...,x_m),要降维到的维数n^{'}
输出:降维后的n维样本D^{'}

  1. 对所有的样本进行中心化: x_i=x_i−\frac{1}{m}\sum_{i=1}^{m}x_i
  2. 计算样本的协方差矩阵\frac{1}{m}XX^T
  3. 求解矩阵\frac{1}{m}XX^T的特征值、
  4. 取出最大的n'个特征值对应的特征向量(w1,w2,...,wn′), 将所有的特征向量标准化后,组成特征向量矩阵W。
  5. 对样本集中的每一个样本x_i,转化为新的样本z_i=W^Tx_i
  6. 得到输出样本集D^{'}=(z_1,z_2,...,z_m)

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

4. PCA算法总结

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

5. 参考文章

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

上一篇 下一篇

猜你喜欢

热点阅读