利用主成分PCA进行特征提取

本文将介绍主成分分析(Principal Component Analysis,PCA)原理,而且它如何在分类问题中发挥降维的做用。译自html

Feature extraction using PCA算法

简介

本文将介绍主成分分析(Principal Component Analysis,PCA)原理,而且它如何在分类问题中发挥降维的做用。函数

在前面咱们讲到过维度灾难,分类器容易对高维的训练集产生过拟合。那么,哪些特征是更好的呢,而哪些又该从高维中除去呢性能

若是全部的特征向量间相互独立,咱们能够很容易的去除区分度很小的特征向量,区分度小的向量可经过特征选择相关方法识别。然而,在实际中,不少向量彼此依赖或依赖潜在的未知变量。一个单一的特征能够用一个值来表明不少信息的集合。移除这样的特征将移除比所须要的更多的信息。在下一节,咱们将介绍做为特征提取的解决此问题的PCA方法,并从两个不一样的角度介绍它的内在工做原理。编码

 PCA:一种去相关方法

家常便饭的是,特征都是相关的。例如,咱们想要使用图像中每一个像素的红色,绿色和蓝色份量来进行图像分类(例如侦测猫和狗),对红光最敏感的图像传感器也捕获一些蓝光和绿光。 相似地,对蓝光和绿光最敏感的传感器也对红光表现出必定程度的敏感度。 结果,像素的R,G,B份量在统计上是相关的。所以,简单地从特征向量中消除R份量,也隐含地除去关于G和B信道的信息。换句话说,在消除特征以前,咱们想要转换完整的特征空间,从而获得底层的不相关份量。3d

下图是一个二维特征空间的例子:code

图一component

图中的特征x和y明显是相关的。事实上,它们的协方差矩阵是:htm

在前面的文章中,咱们讨论了协方差矩阵的几何解释。 咱们看到,协方差矩阵能够分解为在白色的不相关数据上一系列旋转和缩放操做,其中旋转矩阵由该协方差矩阵的特征向量定义。 所以,直观地看到,经过旋转每一个数据点,上图所示的数据D能够被解相关,使得特征向量V成为新的参考轴:对象

图2

经旋转缩放的数据的协方差矩阵如今是对角线的,这意味着新的轴是不相关的:

事实上,上上图中的原始数据是经过两个1维高斯特征向量x1 ~ N(0,1),x2 ~ N(0,1)的线性组合生成的:

由于特征x和y是x1和x2的一些未知的潜在成分的线性组合,直接去除x或y的任意一个,都将丢失来自x1和x2的一些信息。而将数据协方差的特征向量进行旋转,会使咱们直接恢复这两个独立的成分x1和x2(达到比例因子)。这能够被看做以下:原始数据的协方差矩阵的特征向量是(每列表明一个特征向量):

首先要注意的是,在这种状况下,V是一个旋转矩阵,对应于45度旋转(cos(45)= 0.7071),从图1中确实能够看出。其次,将V视为在新的坐标系中线性变换矩阵结果 ,每一个新的特征x'和y'被表示为原始特征x和y的线性组合:

换句话说,特征空间的去相关对应于数据的未知不相关组件x_1和y_1的恢复(若是变换矩阵不是正交的,则恢复到未知缩放因子)。 一旦这些组件被恢复,经过简单地消除x_1或x_2就很容易下降特征空间的维度。

在上面的例子中,咱们从一个二维问题开始。 若是咱们想要下降维数,问题依然是消除x_1(从而x')仍是y_1(从而y')。 尽管这种选择可能取决于许多因素,例如在分类问题的状况下数据的可分性,但PCA只是假设最有意思的特征是具备最大差别或差别的特征。 这个假设是基于信息理论的观点,由于具备最大方差的维度对应于具备最大熵的维度,所以编码最多的信息。 最小的特征向量一般会简单地表示噪声份量,而最大的特征向量一般对应于定义数据的主要份量。

而后简单地经过将数据投影到其协方差矩阵的最大特征向量上来实现经过PCA的降维。 对于上面的例子,所获得的一维特征空间如图3所示:

图3

显然,上面的例子很容易推广到更高维的特征空间。 例如,在三维状况下,咱们能够将数据投影到由两个最大特征向量所定义的平面上以得到二维特征空间,或者咱们能够将其投影到最大特征向量上以得到一维特征空间。 如图4所示:

图4

通常来讲,PCA容许咱们得到原始N维数据的线性M维子空间,其中M <= N。此外,若是未知的不相关份量是高斯分布的,则PCA实际上做为独立份量分析,由于不相关的高斯变量在统计上是独立的。 可是,若是底层组件不是正态分布的,PCA仅仅产生不相关的去相关变量。 在这种状况下,非线性降维算法多是更好的选择。

PCA:一种正交回归方法

在上面的讨论中,咱们从得到独立份量(或者若是数据不是正态分布的话至少是不相关份量)开始,以减少特征空间的维数。咱们发现这些所谓的“主成分”是经过咱们的数据的协方差矩阵的特征分解获得的。而后经过将数据投影到最大的特征向量来下降维数。

如今让咱们暂时忘记咱们但愿找到不相关的组件。相反,咱们如今尝试经过找到原始特征空间的线性子空间来减小维数,在这个子空间上咱们能够投影数据,从而使投影偏差最小化。在2D状况下,这意味着咱们试图找到一个向量,以便将数据投影到该向量上,这至关于投影偏差低于将数据投影到任何其余可能向量时所得到的投影偏差。问题是如何找到这个最佳的向量。

考虑图5所示的例子。显示三个不一样的投影向量,以及所获得的一维数据。在下面的段落中,咱们将讨论如何肯定哪一个投影向量最小化了投影偏差。在寻找一个最小化投影偏差的向量以前,咱们必须定义这个偏差函数。

图5

一个众所周知的方法来拟合2D数据是最小二乘回归。 给定自变量x和因变量y,最小二乘回归函数对应于f(x)= ax + b,使得残差平方和的总和为:sum_{i=0}^N (f(x_i) - y_i)^2被最小化。 换句话说,若是将x看做自变量,那么获得的回归函数f(x)是一个线性函数,能够预测因变量y,使得平方偏差最小。 所获得的模型f(x)由图5中的蓝线表示,而且最小化的偏差如图6所示。

图6

然而,在特征提取的背景下,人们可能会想知道为何咱们将特征x定义为独立变量,特征y是因变量。 事实上,咱们能够很容易地将y定义为自变量,而且找到预测因变量x的线性函数f(y),使得 sum_ {i = 0} ^ N(f(y_i)-x_i)^ 2是最小化。 这对应于水平投影偏差的最小化并致使不一样的线性模型,如图7所示:

图7

显然,独立变量和因变量的选择改变了所获得的模型,使得普通最小二乘回归成为非对称回归。 其缘由是最小二乘回归假设自变量是无噪声的,而因变量则被认为是有噪声的。 然而,在分类的状况下,全部的特征一般是噪音的观察,使得x或y都不该该被视为独立的。 事实上,咱们想得到一个模型f(x,y),同时最小化水平和垂直投影偏差。 这对应于找到一个模型,使正交投影偏差最小化,如图8所示。

图8

由此产生的回归被称为整体最小二乘回归或正交回归,并假设这两个变量都是不完美的观察。 如今有一个有趣的现象是所得到的表示使正交投影偏差最小化的投影方向的矢量对应于数据的最大主成分:

图9

换句话说,若是咱们想经过将原始数据投影到一个向量上来减小维数,使得投影偏差在全部方向上的平方最小化,咱们能够简单地将数据投影到最大的特征向量上。 这正是咱们在上一节中称为主成分分析的地方,咱们在这里展现了这样的投影也使特征空间去相关。

一个实际的PCA应用程序:特征脸

尽管为了可视化的目的,上述示例仅限于二维或三维,可是与训练样本的数量相比,特征的数量不可忽略时,降维一般变得重要。做为示例,假设咱们想要基于标记的面部图像的训练数据集来执行面部识别,即肯定图像中描绘的人的身份。一种方法多是将图像的每一个像素的亮度视为特征。若是输入图像的大小为32×32像素,则这意味着特征矢量包含1024个特征值。而后能够经过计算这个1024维矢量与咱们训练数据集中的人的特征矢量之间的欧几里德距离来对新的人脸图像进行分类。最小的距离告诉咱们咱们正在看哪一个人。

然而,若是咱们只有几百个训练样本,则在1024维空间中操做会变得有问题。此外,欧几里德距离在高维空间中表现得很奇怪,正如前面的文章中所讨论的那样。所以,经过计算1024维特征向量的协方差矩阵的特征向量,而后将每一个特征向量投影到最大的特征向量上,可使用PCA来下降特征空间的维数。

因为二维数据的特征向量是二维的,三维数据的特征向量是三维的,因此1024维数据的特征向量是1024维的。换句话说,为了可视化的目的,咱们能够将每一个1024维的特征向量重塑为32×32的图像。图10显示了经过剑桥人脸数据集的特征分解获得的前四个特征向量:

图10

如今能够将每一个1024维特征向量(以及每一个面)投影到N个最大的特征向量上,而且能够表示为这些特征面的线性组合。这些线性组合的权重决定了人的身份。因为最大的特征向量表示数据中最大的方差,这些特征向量描述了信息最丰富的图像区域(眼睛,噪音,嘴巴等)。经过仅考虑前N个(例如N = 70)特征向量,特征空间的维度大大下降。

剩下的问题是如今应该使用多少个本征面,或者在通常状况下;应该保留多少个特征向量。去除太多的特征向量可能会从特征空间中删除重要的信息,而消除特征向量的太少则会给咱们带来维度的灾难。遗憾的是,这个问题没有直接的答案。尽管可使用交叉验证技术来得到对这个超参数的估计,可是选择最优维数仍然是一个问题,这个问题主要是在经验(一个学术术语,这意味着不只仅是“试错”)方式。请注意,在消除特征向量的同时检查保留原始数据的方差有多少(做为百分比)一般是有用的。这是经过将保留的特征值之和除以全部特征值之和来完成的。

PCA实现的具体步骤

基于前面的部分,咱们如今能够列出用于应用PCA进行特征提取的简单配方:

1)中心化数据
在前面的文章中,咱们代表,协方差矩阵能够写成一系列线性运算(缩放和旋转)。特征分解提取这些变换矩阵:特征向量表示旋转矩阵,而特征值表示比例因子。然而,协方差矩阵并不包含任何有关数据转换的信息。事实上,为了表示转换,须要仿射变换而不是线性变换。

所以,在应用PCA旋转数据以得到不相关的轴以前,须要经过从每一个数据点中减去数据的平均值来抵消任何现有的偏移。这简单地对应于使数据居中以使其平均值变为零。

2)标准化数据
协方差矩阵的特征向量指向数据最大方差的方向。可是,方差是一个绝对数字,而不是相对数字。这意味着以厘米(或英寸)为单位测量的数据差别将远大于以米(或英尺)为单位测量的相同数据的差别。考虑一个例子,其中一个特征表明以米为单位的对象的长度,而第二个特征表明以厘米为单位的对象的宽度。若是数据没有被标准化,那么最大的方差以及最大的特征向量将由第一特征隐含地定义。

为了不PCA的这种与尺度相关的性质,经过将每一个特征除以其标准误差来规范化数据是有用的。若是不一样的功能对应不一样的指标,这一点尤为重要。

3)计算特征分解
因为数据将被投影到最大的特征向量上以下降维数,所以须要得到特征分解。奇异值分解(Singular Value Decomposition,SVD)是有效计算特征分解最经常使用的方法之一。

4)投影数据
为了下降维度,数据被简单地投影到最大的特征向量上。设V是列中包含最大特征向量的矩阵,设D是包含不一样观测值的原始数据。那么投影数据D'能够用D'= V^(T) * D来得到。咱们能够直接选择剩余维数,即V的列数,或者咱们能够定义消除特征向量时须要保留的原始数据。若是只保留N个特征向量,而且e_1 ... e_N表示相应的特征值,则投影原始d维数据以后剩余的方差量能够被计算为:

PCA的陷阱

在上面的讨论中,已经有了一些假设。 在第一节中,咱们讨论了PCA如何去相关数据。 实际上,咱们开始讨论时表达了咱们但愿恢复所观察到的特征的未知的,潜在的独立组成部分。 而后咱们假设咱们的数据是正态分布的,这样统计独立性就至关于没有线性相关性。 事实上,PCA容许咱们解相关数据,从而在高斯状况下恢复独立份量。 可是,重要的是要注意,去相关只对应于高斯状况下的统计独立性。 考虑经过采样半个周期y = sin(x)得到的数据:

图11

虽然上述数据显然是不相关的(平均来讲,当x值上升时,y值增长的幅度与其下降同样多),所以对应于对角线协方差矩阵,可是两个变量之间仍然存在明显的非线性相关性。

通常来讲,PCA只是不相关的数据,但不会消除统计依赖性。若是底层的组件被认为是非高斯的,像ICA这样的技术可能会更有趣。另外一方面,若是明确存在非线性,则可使用诸如非线性PCA的降维技术。可是,请记住,这些方法容易过分拟合,由于要根据相同数量的训练数据来估计更多的参数。

本文所作的第二个假设是,最有区别的信息是经过特征空间中最大的方差来捕获的。因为最大变化的方向编码最多的信息,这极可能是真实的。然而,有些状况下,鉴别信息实际上存在于方差最小的方向上,使得PCA可能极大地损害分类性能。做为一个例子,考虑图12的两种状况,其中咱们将二维特征空间减小为一维表示:

图12

若是最大的判别性信息包含在较小的特征向量中,那么应用PCA可能实际上恶化了维度灾难,由于如今须要更复杂的分类模型(例如非线性分类器)来分类较低维度的问题。 在这种状况下,其余降维方法多是有意义的,例如线性判别分析(LDA),它试图找到最佳分离两个类别的投影向量。

下面的代码片段显示了如何在Matlab中执行维度约简的主成分分析:Matlab source code

小结

在本文中,咱们从两个不一样的角度讨论了PCA的特征提取和降维的优势。 第一个观点解释了PCA如何使咱们去掉特征空间,而第二个观点则代表PCA实际上对应于正交回归。

此外,咱们简要介绍了特征脸是一个众所周知的基于PCA的特征提取的例子,咱们介绍了主成分分析的一些最重要的缺点。

 参考:Feature extraction using PCA

相关文章
相关标签/搜索