本文整理自下面的博客,对PCA和LDA的原理进行介绍,并对比了其不同点。
1).主成分分析(PCA)原理详解
2).线性判别分析LDA与主成分分析PCA
3). PCA(主成成分分析)和LDA(线性判别分析)详解-共性和区别
4).什么时候使用PCA和LDA?
5).PCA的数学原理
6).Dimensionality Reduction——LDA线性判别分析原理篇
7).主成分分析(PCA)原理总结
8). 奇异值分解(SVD)原理与在降维中的应用
(如果想要详细了解其数学原理的推导推荐阅读7和8这两篇文章)
一、PCA简介
1. 相关背景
主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。
在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。
因此需要找到一个合理的方法,在减少需要分析的指标的同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。主成分分析与因子分析就属于这类降维的方法。
下表1是某些学生的语文、数学、物理、化学成绩统计:
首先,假设这些科目成绩不相关,也就是说某一科目考多少分与其他科目没有关系。那么一眼就能看出来,数学、物理、化学这三门课的成绩构成了这组数据的主成分(很显然,数学作为第一主成分,因为数学成绩拉的最开)。为什么一眼能看出来?因为坐标轴选对了!下面再看一组学生的数学、物理、化学、语文、历史、英语成绩统计,见表2,还能不能一眼看出来:
数据太多了,以至于看起来有些凌乱!也就是说,无法直接看出这组数据的主成分,因为在坐标系下这组数据分布的很散乱。究其原因,是因为无法拨开遮住肉眼的迷雾~如果把这些数据在相应的空间中表示出来,也许你就能换一个观察角度找出主成分。如下图1所示:
但是,对于更高维的数据,能想象其分布吗?就算能描述分布,如何精确地找到这些主成分的轴?如何衡量你提取的主成分到底占了整个数据的多少信息?所以,我们就要用到主成分分析的处理方法。
为了说明什么是数据的主成分,先从数据降维说起。数据降维是怎么回事儿?假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上,那么,问题出在哪里?如果你再仔细想想,能不能把x,y,z坐标系旋转一下,使数据所在平面与x,y平面重合?这就对了!如果把旋转后的坐标系记为x’,y’,z’,那么这组数据的表示只用x’和y’两个维度表示即可!当然了,如果想恢复原来的表示方式,那就得把这两个坐标之间的变换矩阵存下来。这样就能把数据维度降下来了!但是,我们要看到这个过程的本质,如果把这些数据按行或者按列排成一个矩阵,那么这个矩阵的秩就是2!这些数据之间是有相关性的,这些数据构成的过原点的向量的最大线性无关组包含2个向量,这就是为什么一开始就假设平面过原点的原因!那么如果平面不过原点呢?这就是数据中心化的缘故!将坐标原点平移到数据中心,这样原本不相关的数据在这个新坐标系中就有相关性了!有趣的是,三点一定共面,也就是说三维空间中任意三点中心化后都是线性相关的,一般来讲n维空间中的n个点一定能在一个n-1维子空间中分析!
上一段文字中,认为把数据降维后并没有丢弃任何东西,因为这些数据在平面以外的第三个维度的分量都为0。现在,假设这些数据在z’轴有一个很小的抖动,那么我们仍然用上述的二维表示这些数据,理由是我们可以认为这两个轴的信息是数据的主成分,而这些信息对于我们的分析已经足够了,z’轴上的抖动很有可能是噪声,也就是说本来这组数据是有相关性的,噪声的引入,导致了数据不完全相关,但是,这些数据在z’轴上的分布与原点构成的夹角非常小,也就是说在z’轴上有很大的相关性,综合这些考虑,就可以认为数据在x’,y’ 轴上的投影构成了数据的主成分!
课堂上老师谈到的特征选择的问题,其实就是要剔除的特征主要是和类标签无关的特征。而这里的特征很多是和类标签有关的,但里面存在噪声或者冗余。在这种情况下,需要一种特征降维的方法来减少特征数,减少噪音和冗余,减少过度拟合的可能性。
PCA的思想是将n维特征映射到k维上(k
现在假设有一组数据如下:
行代表了样例,列代表特征,这里有10个样例,每个样例两个特征。可以这样认为,有10篇文档,x是10篇文档中“learn”出现的TF-IDF,y是10篇文档中“study”出现的TF-IDF。
第一步,分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么第一个样例减去均值后即为(0.69,0.49),得到
第二步,求特征协方差矩阵,如果数据是3维,那么协方差矩阵是
这里只有x和y,求解得
对角线上分别是x和y的方差,非对角线上是协方差。协方差是衡量两个变量同时变化的变化程度。协方差大于0表示x和y若一个增,另一个也增;小于0表示一个增,一个减。如果x和y是统计独立的,那么二者之间的协方差就是0;但是协方差是0,并不能说明x和y是独立的。协方差绝对值越大,两者对彼此的影响越大,反之越小。协方差是没有单位的量,因此,如果同样的两个变量所采用的量纲发生变化,它们的协方差也会产生数值上的变化。
第三步,求协方差的特征值和特征向量,得到
上面是两个特征值,下面是对应的特征向量,特征值0.0490833989对应特征向量为(-0.735178656, 0.677873399),这里的特征向量都归一化为单位向量。
第四步,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是(-0.677873399, -0.735178656)T。
第五步,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData为
FinalData(10*1) = DataAdjust(10*2矩阵) x 特征向量(-0.677873399, -0.735178656)T
得到的结果是
这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。
上面的数据可以认为是learn和study特征融合为一个新的特征叫做LS特征,该特征基本上代表了这两个特征。上述过程如下图2描述:
正号表示预处理后的样本点,斜着的两条线就分别是正交的特征向量(由于协方差矩阵是对称的,因此其特征向量正交),最后一步的矩阵乘法就是将原始样本点分别往特征向量对应的轴上做投影。
LDA(这里指的是fisher’s linear discriminant)把线性分类看成是数据降维的一种应用。考虑一个二分类问题,假设输入D维向量x,我们通过线性变换将它投影到一维空间上:
y=wTx
如果我们对y设定一个阈值,令 y⩾−w0 的时候,判定为class1,否则判定为class2.那么这其实就是标准的线性分类器。为了能让我们的判定尽可能准确,我们需要让投影之间的两个类之间的差距尽可能大。现在仍旧考虑二分类问题,假设有N1个C1类别的点,有N2个C2类别的点,则两个类别的数据的均值分别为
最简单的分类方法,就是让投影之后的两个类别的均值相差越大越好。也就是说,我们需要选择一个投影方向(单位投影矢量w),使得下式最大
m2^−m1^=wT(m2−m1)
其中
mk^=wTmk
同时满足
wTw=1
这么一个约束优化问题和上面的PCA类似,解得结果可以得到
w∝(m2−m1)
也就是说,w是和两类数据中心点构成的矢量平行。如下面左图所示:
红色和蓝色分别表示两类数据,可以看到,尽管在投影方向w上,两类数据确实有分开,但是还存在很大程度上的交叠。Fisher提出的观点就是在让投影之后的数据尽量分开的同时,也要让两个数据的方差最小,最后变成右图所示的结果。
投影之后数据的类内方差表达式为
s2k=∑n∈Ck(yn−mk^)2
其中yn表示xn投影之后的值。我们可以定义总体的类内方差为 s1+s2。Fisher判别准则定义为类间方差和类内方差的比值,也就是
把w的表达式代入得到
其中SB表示类间协方差矩阵,Sw表示类内协方差矩阵,也就是
SB=(m2−m1)(m2−m1)T −−−(2)
Sw=∑n∈C1(xn−m1)(xn−m1)T+∑n∈C2(xn−m2)(xn−m2)T
对(1)式求导,令导数等于0(为了方便,可以对(1)式两边先取对数,然后求导),可以得到
(wTSBw)Sww=(wTSww)SBw −−−(3)
从(2)式我们可以看到 SBw是始终和 m2−m1平行的,同时我们并不在意 w的大小,只在意它的方向,因此,我们可以把 wTSBw和 wTSww 直接去掉,然后再在(3)式两边同时乘上 S−1w,就可以得到
w∝S−1w(m2−m1) −−−(4)
(4)式表示的就是Fisher线性判别器。找到和合理的投影方向之后,我们可以通过极大似然的方法来估计最优的分类阈值。
所以PCA和LDA虽然都用到数据降维的思想,但是监督方式不一样,目的也不一样。PCA是为了去除原始数据集中冗余的维度,让投影子空间的各个维度的方差尽可能大,也就是熵尽可能大。LDA是通过数据降维找到那些具有discriminative的维度,使得原始数据在这些维度上的投影,不同类别尽可能区分开来。下面这张图一定程度上表示了PCA和LDA之间投影选择的差别。
3. PCA和LDA的应用场合
两者都是为了在对原始数据降维之后进行分类。PCA是无监督的方式,它没有分类标签,降维之后需要采用K-Means或自组织映射网络等无监督的算法进行分类。LDA是有监督的方式,它先对训练数据进行降维,然后找出一个线性判别函数。
如果不降维,将导致 数据分布在一个极小的区域内。也叫维度灾难。
比如说,球的体积是 v 正比于 R^3。在R/2的同心球,体积正比于(R/2)^3。同心小球是全球的体积八分之一。
如果是多维球,球的大部分体积 分布在球表面内侧的“很薄”的一层,比如千/万维的话....
所以要降维。不降维,高维特征没啥用,比如人脸识别....
PCA是无类别信息,不知道样本属于哪个类,用PCA,通常对全体数据操作。
LDA有类别信息,投影到类内间距最小and类间间距最大...
也有一些算法,先用PCA搞一遍,再用LDA搞一遍,也有相反。反正有论文是这么搞的,至于是不是普适,要看具体问题。
具体问题具体分析,这是最重要的...