本文将介绍主成分分析 (Principal Component Analysis,PCA) 原理, 并且它如何在分类问题中发挥降维的作用译自
Feature extraction using PCA
简介
本文将介绍主成分分析 (Principal Component Analysis,PCA) 原理, 并且它如何在分类问题中发挥降维的作用
在前面我们讲到过维度灾难, 分类器容易对高维的训练集产生过拟合那么, 哪些特征是更好的呢, 而哪些又该从高维中除去呢
如果所有的特征向量间相互独立, 我们可以很容易的去除区分度很小的特征向量, 区分度小的向量可通过特征选择相关方法识别然而, 在实际中, 很多向量彼此依赖或依赖潜在的未知变量一个单一的特征可以用一个值来代表很多信息的集合移除这样的特征将移除比所需要的更多的信息在下一节, 我们将介绍作为特征提取的解决此问题的 PCA 方法, 并从两个不同的角度介绍它的内在工作原理
PCA: 一种去相关方法
屡见不鲜的是, 特征都是相关的例如, 我们想要使用图像中每个像素的红色, 绿色和蓝色分量来进行图像分类(例如侦测猫和狗), 对红光最敏感的图像传感器也捕获一些蓝光和绿光 类似地, 对蓝光和绿光最敏感的传感器也对红光表现出一定程度的敏感度 结果, 像素的 R,G,B 分量在统计上是相关的因此, 简单地从特征向量中消除 R 分量, 也隐含地除去关于 G 和 B 信道的信息换句话说, 在消除特征之前, 我们想要转换完整的特征空间, 从而得到底层的不相关分量
下图是一个二维特征空间的例子:
图一
图中的特征 x 和 y 明显是相关的事实上, 它们的协方差矩阵是:
在前面的文章中, 我们讨论了协方差矩阵的几何解释 我们看到, 协方差矩阵可以分解为在白色的不相关数据上一系列旋转和缩放操作, 其中旋转矩阵由该协方差矩阵的特征向量定义 因此, 直观地看到, 通过旋转每个数据点, 上图所示的数据 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
来源: http://www.bubuko.com/infodetail-2482495.html