pca降维算法「PCA等降维算法真的能提升分类任务的性能吗」
对于深度学习中的图像处理任务来说,很多研究人员都会用到降维处理技术,比如主成分分析(PCA)、稀疏自动编码器(SAE)、随机邻近嵌入(SNE)等,每种降维方法都有各自的侧重点,根据相应的任务需求选择合适的降维算法。在图像处理任务中,使用降维技术的原因主要有以下两个,一方面是通过降维能够降低计算复杂度,另外一方面受限于输入图像尺寸的大小,需要对其进行一些预处理,比如常用的卷积神经网络模型(CNN),输入图像的尺寸一般都不大。降维算法一般是选择最能代表数据集中的特征从而减少特征的数量,那么,降维算法能否对图像分类任务的性能有所提升?毕竟降维算法处理后的特征并不能完全表征图像的全部信息,下面就让我们一窥究竟吧。
降维算法本文主要以PCA降维算法为例分析,在直接编写代码验证之前,先来谈谈降维算法。维数降低一般有两种主要算法:一种是线性判别分析(LDA),另外一种是主成分分析(PCA)。二者之间的主要区别在于,LDA使用类别信息来查找新特征,以便最大化类别的可分性,而PCA使用每个特征的方差来做到这一点。在这种情况下,LDA可以被认为是有监督算法,而PCA是无监督算法。
谈谈PCA算法PCA的想法很简单,就是找到一组能概括数据集的低维坐标集。为什么我们需要概况数据呢?举一个例子:假设有一个包括一组汽车属性的数据集,这些属性通过其尺寸、颜色、形状、紧凑度、车身半径、座椅数量、门数以及行李箱尺寸等参数来描述每辆车。但是,许多属性之间是由关联的,所有部分属性是多余的。因此,我们应该根据描述每辆车的能力的高低来删除这些冗余属性,这就是PCA的目标。例如,考虑将车轮数量作为汽车和公共汽车的特征,几乎每个类别中每个样例都有四个轮子,因此,这个特征的差异度很小(一些罕见的公共汽车有六个轮子),所以这个特征无法区分公共汽车和汽车,但两种车辆实际上是非常不同。现在,考虑将高度作为特征,汽车和公共汽车具有不同的属性值,并且从最低的汽车到最高的公共汽车二者的高度差异具有很大的范围。显然,车辆的高度可以作为分离它们的良好特征。PCA算法不考虑类别的信息,它只是查看每个特征的方差,因为可以合理地假设,呈现高方差的特征更有可能在类别之间进行良好的区分。
通常,人们会有一个误解,认为PCA算法会从数据集中选择某些特征并丢弃其他特征。实际上,该算法是基于旧的属性来组合构造新的属性集。从数学上讲,PCA执行线性变换,将原始特征集变换到由主成分组成的新空间。这些新特征对我们来说并没有任何的实际意义,只具有代数意义,因此不要认为PCA能够找到之前从未想过存在的新特征。许多人仍然相信机器学习算法是神奇的,他们直接将数以千计的输入投入到算法中,并希望机器学习算法能够为其业务找到所有的见解和解决方案,在这里声明一点,不要被一些夸张的报道所欺骗,机器学习目前的能力有限,数据科学家的工作是通过使用机器学习算法作为一组工具而并不是魔术棒,智能通过对数据进行良好的探索性分析来找到对业务的见解。
主成分空间在新的特征空间中,我们正在寻找一些在类别中存在很大差异的属性。正如之前举得例子所示,一些呈现出低方差的属性作用不大,无法很好的区分样例。另一方面,PCA寻找的属性可以尽可能多地显示类别,以构建出主成分空间。该算法使用方差矩阵、协方差矩阵、特征向量和特征值对的概念来实现PCA算法,从而提供一组特征向量及其各自的特征值。
那么,我们应该如何处理特征值和特征向量呢?答案非常简单,特征向量表示主成分空间的新坐标系,特征值带有每个特征向量具有的方差信息。因此,为了减小数据集的维数,将选择具有方差值大的那些特征向量,并丢弃具有方差值小的那些特征向量,具体实现步骤可以网上找下相关资源。下面将通过具体的例子和代码展示PCA算法是如何工作的。
实验代码本部分内容是比较有趣的部分,现在让我们看看PCA算法是否真的改善了分类任务的结果。
为了验证它,采取的策略是在数据集上应用神经网络并查看其初始结果。之后,我将在分类之前执行PCA降维,之后在降维后得到的数据集上应用相同的神经网络,最后比较两个结果。
该数据集源自名为“Statlog数据集”的UCI机器学习库,该数据集存储了四个车辆轮廓的一些度量,用于分类。它由946个示例和18个度量(属性)所有数值组成,可以在此链接中查看更多详细信息。神经网络结构是一个多层感知机,其具有四个隐藏节点和一个输出节点,所有的激活函数选择sigmoid函数,PCA的处理是通过R数据包完成。
准备数据集首先,准备二进制分类的数据集,仅从两个类别中选择示例以构成二进制分类。这些例子来自“bus(公共汽车)”和“saab(萨博汽车)”类。类别“saab”用类别0替换,类别“bus”用类别1替换。下一步是将数据集划分为训练数据集和测试数据集,其比例分别为占总类示例的60%和40%。
在数据集准备好之后,一次性使用所有特征构建神经网络模型,然后对其应用测试数据集,看其性能。
多层感知机神经网络
无PCA处理的结果
从上面的结果中首先可以看到,混淆矩阵(Confusion Matrix)表示有多少例子被分类,主对角线显示正确分类的示例,次对角线显示错误分类。这个结果中,分类器表示自己十分困惑,因为几乎所有来自“saab”类别的例子都被正确分类,但它也将大多数“bus”类别的样例分类为“saab”类别。此外,可以看出其精度值(Accuracy)约为50%,这对于分类任务来说是一个非常糟糕的结果,分类器本身就有一半一半的概率将新样例分类为“saab”或“bus”类别。因此,由神经网络构成的该分类器性能不好。
PCA处理后的结果现在,对数据集进行主成分分析PCA处理,得到特征值和特征向量。实际上,你会看到R数据包中的PCA函数提已经供了一组按降序排序的特征值,这意味着第一个分量是方差最大的一个,第二个分量是方差第二大的特征向量,以此类推。下面的代码展示了如何选择特征值的特征向量。
主成分
方差累积和
来自R数据包中的“prcomp”函数执行PCA,该函数返回所需的所有特征值和特征向量。上面的第一张图显示每个特征的方差百分比。从图中可以看到,第一成分具有最高的方差,值约为50%,而第8个成分的方差约为0%。所以,这告诉我们。应该取其前八个组件作为主要成分。第二张图展示了方差的另外一个视角——方差的累积和。从图中可以看到,前八个特征值对应的方差累积和占所有方差的大约98%。实际上,这是一个非常好的数字,这意味着只有2%的信息丢失了,最大的好处是,从具有18维特征的空间转换到另外一个只有8维特征的空间,仅丢失了2%的信息,这就是降维的力量。
当我们知道了构成新空间的特征数量时,就可以创建出新的数据集,然后再次对其构建神经网络模型,并用新的测试集测试其性能。
从上面可以看到,得到了非常好的结果。在这次实验中,混淆矩阵显示出神经网络在两个类别中都具有较少的错误分类次数,并且,出主对角线的值和精度值都在95%左右,这表明新的分类器有95%的机会正确分类一个新的样例,这个准确率对于分类问题而言,是一个非常不错的结果。
结论降维在机器学习中起着非常重要的作用,特别是当数据集具有数千种特征时。主成分分析是最优的降维算法之一,在实际项目中很容易被理解和使用。除了使得特征处理变得更加容易之外,这项技术还能够改善分类器的结果,从文中的实验对比来看,提升效果还是很大的。
最后,对于PCA降维算法能否提升分类任务的性能问题而言,其答案是肯定的,PCA降维算法有助于改善分类器的性能。
作者信息Meigarom Diego Fernandes,机器学习和数据科学研究者
本文由阿里云云栖社区组织翻译。
文章原标题《Dimensionality Reduction — Does PCA really improve classification outcome?》,译者:海棠,审校:Uncle_LLD。
葫芦书第四章——降维
在机器学习中,数据通常需要被表示为向量形式以输入模型进行训练。但众所周知,对高维向量进行处理和分析时,会极大地消耗系统资源,甚至产生维度灾难(相关笔记记录于 这里 )。因此,用一个低维度的向量表示原始高维度的特征就显得尤为重要。
在机器学习领域中,我们对原始数据进行特征提取,有时会得到比较高维的特征向量。在这些向量所处的高维空间中,包含很多的冗余和噪声。我们希望通过降维的方式来寻找数据内部的特性,从而提升特征表达能力,降低训练复杂度。主成分分析(PCA)作为降维中最经典的方法,属于一种 线性、非监督、全局的降维算法 。
1、所谓主成分,就是把原特征进行线性组合后得到新的特征,此特征尽可能多地保留了原特征的方差。
2、设一组参数 ,记原特征为 ,新特征为 ,根据定义,我们要让 的方差尽可能大,即 这就是我们的目标函数。
3、具体的求解过程要借助特征值分解。
(a)是二维空间中经过中心化的一组数据,我们很容易看出主成分所在的轴(以下称为主轴)的大致方向,即(b)中黄线所处的轴。因为在黄线所处的轴上,数据分布得更为分散,这也意味着数据在这个方向上方差更大。
我们不难引出 PCA的目标,即最大化投影方差,也就是让数据在主轴上投影的方差最大 。对于给定的一组数据点 ,其中所有向量均为列向量,中心化后的表示为 ,其中 。我们知道,向量内积在几何上表示为第一个向量投影到第二个向量上的长度,因此向量 在 (单位方向向量)上的投影坐标可以表示为 。所以目标是找到一个投影方向 ,使得 在 上的投影方差尽可能大。易知,投影之后均值为0( ),因此投影后方差可以表示为:
其中 其实就是协方差矩阵,我们将其写为 ,另外,由于 是单位向量,因此 ,因此我们要求解一个最大化问题:
引入拉格朗日乘子并对 求导令其等于0,便可以推出 ,此时:
不难看出, 投影后的方差就是协方差矩阵的特征值。我们要找到最大的方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量。次佳投影方向位于最佳投影方向的正交空间中,是第二大特征值对应的特征向量,以此类推。至此,我们得到了PCA的求解方法:
1)对样本数据进行中心化处理。
2)求样本协方差矩阵。
3)对协方差矩阵进行特征值分解,将特征值从大到小排列。
4)取特征值前 大对应的特征向量 通过以下映射将 维样本映射到 维:
定义降维后的信息占比为:
可以。从线性回归的角度切入,最佳投影方向对应的直线应该使得各点到此直线的距离的平方和最小。关于这个目标和最大方差目标的等价性,我在 这里 已经说明过了。
从求解直线的思路出发,很容易联想到数学中的线性回归问题,其目标也是求解一个线性函数使得对应直线能够更好地拟合样本点集合。如果我们从这个角度定义PCA的目标,那么问题就会转化为一个回归问题。
数据集中每个点 到 维超平面 的距离为:
其中 表示 在超平面 上的投影向量。若该超平面 由 个标准正交基 构成,则有线代知识可知, 可由这组基线性表示:
其中 表示 在 方向上投影的长度。因此 实际上就是 在 这组标准正交基下的坐标。而PCA要优化的目标是:
将上式中每个距离展开:
可以看到,第一项与选取的 无关,是一个常数,将 代入第二项第三项得到:
因为当 时, ,因此上式可写为:
于是:
这等价于求解带约束的优化问题:
如果我们对 中的 个基 依次求解,就会发现 和最大方差理论的方法完全等价 。
线性判别分析(Linear Discriminant Analysis, LDA)是一种 有监督学习算法 ,同时经常被用来对数据进行降维。
相比于PCA,LDA可以作为一种有监督的降维算法。在PCA中没有考虑数据的标签(类别),只是把原数据映射到一些方差比较大的方向上而已。
假设用不同的颜色标注 两个不同类别的数据,如图所示。根据PCA算法,数据应该映射到方差最大的那个方向,亦即 轴方向。但是, 两个不同类别的数据就会完全混合在一起,很难区分开。所以,使用PCA算法进行降维后再进行分类的效果会非常差。但是如果使用LDA算法,数据会映射到 轴方向。
1、要想降维过程中不损失类别信息,一个简单的想法就是降维后两类样本点之间的距离越远越好,这样才能将两类样本区分开来。
2、在这样的目标下,假设样本在目标超平面上的投影,并考察两类样本投影的均值点,求解一个超平面,使得这两个均值点之间的距离最大。
LDA首先是为了分类服务的,因此只要找到一个投影方向 ,使得投影后的样本尽可能按照原始类别分开 。 我仍不妨从一个简单的二分类问题出发,有 两个类别的样本,两类的均值分别为 ,我们希望投影之后两类之间的距离尽可能大,距离表示为:
和 表示两类中心在 方向上的投影向量,即 ,因此需要优化的问题为:
容易发现当 方向与 一致的时候,该距离达到最大值,例如对图(a)的黄棕两种类别的样本点进行降维时, 若按照最大化两类投影中心距离的准则,会将样本点投影到下方的黑线上。但是原本可以被线性划分的两类样本经过投影后有了一定程度的重叠,这显然不能使我们满意。我们希望得到的投影结果如图(b)所示,虽然两类的中心在投影之后的距离有所减小,但确使投影之后样本的可区分性提高了。
仔细观察两种投影方式的区别,可以发现,在图(b)中,投影后的样本点似乎在每一类中分布得更为集中了,用数学化的语言描述就是每类内部的方差比(a)中更小。这就引出了 LDA的中心思想一一最大化类间距离和最小化类内距离 。
在前文中我们已经找到了使得类间距离尽可能大的投影方式,现在只需要同时优化类内方差,使其尽可能小。我们将整个数据集的类内方差定义为各个类分别的方差之和,将目标函数定义为类间距离和类内距离的比值,于是引出我们需要最大化的目标:
真中 为单位向量, 分别表示两类投影后的方差:
因此 可以写成:
定义类间散度矩阵为:
类内散度矩阵为:
则有:
我们要最大化 ,只需对 求偏导,并令导数等于零:
于是得出:
在二分类中 和 是两个数,令 ,于是:
即:
从这里我们可以看出,我们最大化的目标对应了一个矩阵的特征值。 于是LDA降维变成了一个求矩阵特征向量的问题。 就对应矩阵 最大的特征值,而投影方向就是这个特征值对应的特征向量 。
对于二分类这一问题,由于 ,因此 的方向始终与 一致,若只考虑 的方向而不考虑长度,可得 。
1、LDA和PCA最显著的区别就是前者是有监督方法而后者是无监督方法,因此在应用中,对于数据中有标签的应该使用LDA,对于数据中无标签的则使用PCA。
2、数学推导上,两者的区别在于,PCA并未考虑类之间的距离(因为PCA并未用到标签信息),而是仅仅考虑了降维后数据的方差,从这个角度来说,PCA相当于在LDA中将所有数据当成一类去处理的特殊情形。因此我们可以看到两者的数学推导也十分相似,最终目标都归为求解一个矩阵的特征值分解。
首先将LDA拓展到多类高维的情况以和问题PCA的求解对应。假设有 个类别,并需要最终将特征降维至 维。我们要找到一个 维投影超平面 使得投影后的样本点满足LDA的目标一一最大化类间距菌和最小化类内距离。
回顾两个散度矩阵,类内散度矩阵 在类别数增加时仍满足定义。而之前两类问题的类间散度矩阵 在类别增加后就无法按照原始定义。
考虑三类样本的情况, 分别表示棕绿黄三类样本的中心, 表示这三个中心的均值(也即全部样本的中心), 表示第 类的类内散度。我们可以定义一个新的矩阵 表示全局整体的散度,称为全局散度矩阵:
如果把全局散度定义为类内散度与类间散度之和,即 ,那么类间散度矩阵可表示为:
其中 是第 个类别中的样本个数, 是总的类别个数。根据LDA的原理,可以将最大化的目标定义为:
剩下的求解过程与之前二分类LDA相同。
至此我们得到了与PCA步骤类似,但具有多个类别标签高维数据的LDA求解方法:
1)计算数据集中每个类别样本的均值向量 ,及总体均值向量 。
2)计算类内散度矩阵 和全局散度矩阵 ,得到类间散度矩阵 。
3)对矩阵 进行特征值分解,将特征值从大到小排列。
4)取特征值前 大的特征值对应的特征向量 ,通过以下映
射将 维样本映射到 维:
从PCA和LDA两种降维方法的求解过程来看,它们确实有着很大的相似性,但对应的原理却有所区别。首先从目标出发, PCA选择的是投影后数据方差最大的方向。由于它是无监督的,因此PCA假设方差越大,信息量越多,用主成分来表示原始数据可以去除冗余的维度,达到降维。而LDA选择的是投影后类内方差小、类间方差大的方向,其用到了类别标签信息。为了找到数据中具有判别性的维度,使得原始数据在这些方向上投影后,不同类别尽可能区分开 。
举一个简单的例子,在语音识别中,我们想从一段音频中提取出人的语音信号,这时可以使用PCA先进行降维,过滤掉一些固定频率(方差较小)的背景噪声。但如果我们的需求是从这段音频中区分出声音属于哪个人,那么我们应该使用LDA对数据进行降维,使每个人的语音信号具有区分性。
从应用的角度,我们可以掌握一个基本的原则一一 对无监督的任务使用PCA进行降维,对有监督的则应用LDA 。
常用降维方法之PCA 和 LDA
PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。而方差最大的那个维度是主成分。
PCA是比较常见的线性降维方法,通过线性投影将高维数据映射到低维数据中,所期望的是在投影的维度上,新特征自身的方差尽量大,方差越大特征越有效,尽量使产生的新特征间的相关性越小。
PCA算法的具体操作为对所有的样本进行中心化操作,计算样本的协方差矩阵,然后对协方差矩阵做特征值分解,取最大的n个特征值对应的特征向量构造投影矩阵。
再举个栗子:
下面举一个简单的例子,说明PCA的过程。
假设我们的数据集有10个二维数据(2.5,2.4), (0.5,0.7), (2.2,2.9), (1.9,2.2), (3.1,3.0), (2.3, 2.7), (2, 1.6), (1, 1.1), (1.5, 1.6), (1.1, 0.9),需要用PCA降到1维特征。
首先我们对样本中心化,这里样本的均值为(1.81, 1.91),所有的样本减去这个均值向量后,即中心化后的数据集为(0.69, 0.49), (-1.31, -1.21), (0.39, 0.99), (0.09, 0.29), (1.29, 1.09), (0.49, 0.79), (0.19, -0.31), (-0.81, -0.81), (-0.31, -0.31), (-0.71, -1.01)。
现在我们开始求样本的协方差矩阵,由于我们是二维的,则协方差矩阵为:
对于我们的数据,求出协方差矩阵为:
求出特征值为(0.0490833989, 1.28402771),对应的特征向量分别为:
由于最大的k=1个特征值为1.28402771,对于的k=1个特征向量为 则我们的W=
我们对所有的数据集进行投影 得到PCA降维后的10个一维数据集为:(-0.827970186, 1.77758033, -0.992197494, -0.274210416, -1.67580142, -0.912949103, 0.0991094375, 1.14457216, 0.438046137, 1.22382056)
在上面的PCA算法中,我们假设存在一个线性的超平面,可以让我们对数据进行投影。但是有些时候,数据不是线性的,不能直接进行PCA降维。这里就需要用到和支持向量机一样的核函数的思想,先把数据集从n维映射到线性可分的高维N>n,然后再从N维降维到一个低维度n', 这里的维度之间满足n'<n<N。
使用了核函数的主成分分析一般称之为核主成分分析(Kernelized PCA, 以下简称KPCA。假设高维空间的数据是由n维空间的数据通过映射产生。
则对于n维空间的特征分解:
映射为:
通过在高维空间进行协方差矩阵的特征值分解,然后用和PCA一样的方法进行降维。一般来说,映射不用显式的计算,而是在需要计算的时候通过核函数完成。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。
这里对PCA算法做一个总结。作为一个非监督学习的降维方法,它只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。为了克服PCA的一些缺点,出现了很多PCA的变种,比如第六节的为解决非线性降维的KPCA,还有解决内存限制的增量PCA方法Incremental PCA,以及解决稀疏数据降维的PCA方法Sparse PCA等。
PCA算法的主要优点有:
LDA(线性判别分析,Linear Discriminant Analysis)是另一种常用的降维方法,它是有监督的。LDA在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解下它的算法原理。这里需要注意的是,此处的LDA与文本主题模型中的LDA(隐含狄利克雷分布,Latent Dirichlet Allocation)并不相同,他是一种处理文档的主题模型。
LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。
LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。
什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
可能还是有点抽象,我们先看看最简单的情况。假设我们有两类数据 分别为红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。
以上就是使用LDA进行降维的算法流程。实际上LDA除了可以用于降维以外,还可以用于分类。一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。
LDA用于降维,和PCA有很多相同,也有很多不同的地方,因此值得好好的比较一下两者的降维异同点。
这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。
当然,某些某些数据分布下PCA比LDA降维较优,如下图所示:
LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。
LDA算法的主要优点有:
参考文章: 刘建平老师的博客园
文章评论