在看数字图像处理的压缩章节,突然看到PCA可以用来压缩图像,于是学乎。本文主要大致简单说下整个实验的过程和一些关键的点,详细和更好的解说在我给出的资料里面有。
压缩的一种方法论就是先将一张,一个信号的数据量进行某种分解,这种分解必须是有某种“compact”(紧凑)的特性,也就是说大部分的信息存在于少量的系数中,而像不是原始数据中的那样子简单均匀的分布。如果分解得好,压缩的时候只保留少量的数据量就可以保留几乎一张或者一个信号。这里是有损压缩,但是这种分解还原的方法也可以进行无损压缩。怎么做得到呢?如果我们不扔掉大部分不重要的系数,我们好像没有办法减少数据量啊?我们分解后系数比较小的那些我们可以用比较少的位数对其进行编码,这样子就可以较少数据量啦,而且这个过程没有损失掉即使很少的信息。我知道的分解有,傅里叶变换,小波变换,SVD分解(同本文的PCA,只不过是不同角度的)。
下一张用PCA进行分解压缩的,PCA首先分解为很多个系数乘以矩阵的形式,这些系数有大有小,我们用一小部分比较大的那些系数进行还原图像,可以看到取到了其中的30个系数得出图像已经非常好了,取到前50个系数的时候,几乎是看不出来有什么分别,这时数据压缩比是646%。
PCA叫做主成分分析,对这个名称最直观的感受我们可以来看下一个例子。两个绿色的点是两个向量的端点,原点是向量的起点,这两个向量几乎在同一条直线上,如果采用直角坐标系来表示这两组向量需要4个系数,这两个向量进行主成分分析之后得到一个新的单位正交基,如下图中的直角坐标系所示,如果用这个单位正交基来表示这两个向量。这两个新的单位正交基就是PCA中的主成分,从图中我们可以知道我们每个向量只要用一个基就可以很好地接近原始的向量。这就达到了降维的效果。
现实中我们采集数据存在很大的冗余度,如果不进行降维,计算的量是非常大的。比如一幅3232人脸或者手写数字的图像,我们展开成11024维的向量后通过比对这些向量的接近程度来识别人脸或者手写数字(k近邻算法,参考《机器学习实战指南》第二章)。但是比对这1024维的数据计算量太大了,一个简单的降维方法是,你可以抽取只取图像偶数行数和偶数列数来构建一个新的低维向量,但是这样子降低的维数是比较少的,再继续进行几次这样子的操作,但在保证识别效果前提下,降低的维数是十分有限的。在后面的实验中,你可以看到我们只需取其中的50维,甚至20多维就可以得到很好的效果。反之在下面的这张1024个,我利用迭代取偶数行列的方式最后得到其中50个像素,你能通过计算机识别出是哪个数字吗这种降维方式显然失去了很信息量。但是我们取出PCA分解出来的50多维数据确是各个数字的最“主”的主成分,信息量被很好地集中在这50维的数据里面。
于是我们就用这种方法来进行计算,首先是用PCA对训练数据求出主成分,保留其中一部分的主成分,降低了维数。在识别手写数字的时候,我们将上图中的手写数字0的当作向量 a 分解到0~9各自的取出的那部分主成分,然后再分别还原到原始的图像,还原回来的图像向量因为丢失了部分的维数,大多数情况下会跟原始的向量 a 有一些差别err,但这种差异如果分解在手写数字0的s训练出来的主成分理论上是最小的,因此我们可以从此识别出是数字0。
对比k近邻算法1024维近乎绝望的计算复杂度,这里我们只用了50多维进行计算,大大提高了计算效率。
两种算法的速度对比,接近10倍的差值,错误率确是相近的。
降低PCA计算的维度到大概20多,看计算速度是否有提升,错误率是否也上升,错误率没有进一步提升,然并卵。
再进行降维,降到个位数以内,奇迹出现了,错误率上升了一倍,但是计算的复杂度也下降了。
接着我们来看看算错的那些是奇葩还是算法不好?
这个测试库里面说是0,而算法测出来是4
最后放上一些可能有用的链接:
PAC普林斯顿讲义
本文相关线性代数很清晰的一个ppt
基于PCA的人脸识别步骤
主成分分析(PCA)原理详解
直接利用命令 polyfit(x,yM),这里M是要拟合多项式的次数,返回的结果是多项式系数。
或者也可以直接利用最小二乘法求y=ax+b,找本计算方法一看就能明白了。
在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。
因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。
主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。
PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。
如图。我们希望找到某一个维度方向,它可以代表这两个维度的数据。图中列了两个向量方向,u1和u2,那么哪个向量可以更好的代表原始数据集呢?从直观上也可以看出,u1比u2好。
为什么u1比u2好呢?可以有两种解释,第一种解释是样本点到这个直线的 距离足够近 ,第二种解释是样本点在这个直线上的 投影能尽可能的分开 。
假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上,那么,问题出在哪里?如果你再仔细想想,能不能 把x,y,z坐标系旋转一下 ,使数据所在平面与x,y平面重合?这就对了!如果把旋转后的坐标系记为x',y',z',那么这组数据的表示只用x'和y'两个维度表示即可!认为把数据降维后并没有丢弃任何东西,因为这些数据在平面以外的第三个维度的分量都为0,即z'的坐标为0。假设这些数据在z'轴有一个很小的抖动,那么我们仍然用上述的二维表示这些数据,理由是我们可以认为这两个轴x'和y'的信息是数据的主成分,而这些信息对于我们的分析已经足够了,z'轴上的抖动很有可能是噪声。
内积运算:
内积的几何意义:
注意这里我们专门区分了矢量长度和标量长度,标量长度总是大于等于0,值就是线段的长度;而矢量长度可能为负,其绝对值是线段长度,而符号取决于其方向与标准方向相同或相反。
A与B的内积等于A到B的投影长度乘以B的模。再进一步,如果我们假设B的模为1,即让|B|=1|B|=1,那么就变成了:
则内积几何意义:设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度!
(1)什么是基?
如上图,我们经常用线段终点的点坐标表示向量,例如上面的向量可以表示为(3,2)。但是 只有一个(3,2)本身是不能够精确表示一个向量的 。这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2,我们隐式把以x轴和y轴上正方向长度为1的向量为标准,即基为(1,0)和(0,1)。因为它们分别是x和y轴正方向上的单位向量,因此就使得二维平面上点坐标和向量一一对应,非常方便。
所以,要准确描述向量,首先要确定一组基,然后给出基所在的各个直线上的投影值,进而确定坐标值。
(2)什么是基变换?
实际上任何两个线性无关的二维向量都可以成为一组基,所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量。例如:(1,1)和(-1,1)也可以成为一组基。
一般来说,我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了!实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。则(1,1)和(-1,1)同方向上模为1的新基为:
(3)用矩阵表示基变换
将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标的分量。实际上,我们可以用矩阵相乘的形式简洁的表示这个变换:
其中矩阵的两行分别为两个基,乘以原向量,其结果刚好为新基的坐标。可以稍微推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1),(2,2),(3,3),想变换到刚才那组基上,则可以这样表示:
一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果 。
最后,上述分析同时给矩阵相乘找到了一种物理解释:两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。更抽象的说,一个矩阵可以表示一种线性变换。
上面我们讨论了选择不同的基可以对同样一组数据给出不同的表示,而且如果基的数量少于向量本身的维数,则可以达到降维的效果。但是我们还没有回答一个最最关键的问题:如何选择基才是最优的。或者说,如果我们有一组N维向量,现在要将其降到K维(K小于N),那么我们应该如何选择K个基才能最大程度保留原有的信息?看下图:
那么如何选择最优基这个问题被形式化为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大。
至此我们知道一下几点:
对原始数据进行(线性变换)基变换可以对原始样本给出不同的表示;
基的维度小于数据的维度可以起到降维的效果;
对基变换后的新样本求其方差,选取使其方差最大的基作为最优基。
对于上面二维降成一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。考虑三维降到二维问题。与之前相同,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。
至此,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。
推广到一般情况:
(1)拉格朗日法
(2) 奇异值分解法(SVD)
在PCA降维过程中,当进行协方差矩阵上求解特征值时,如果面对维度高达1000010000 ,可想而知耗费的计算量程平方级增长。面对这样一个难点,从而引出奇异值分解(SVD),利用SVD不仅可以解出PCA的解,而且无需大的计算量。
PCA算法的主要优点有:
1、仅仅需要以方差衡量信息量,不受数据集以外的因素影响。
2、各主成分之间正交,可消除原始数据成分间的相互影响的因素。
3、计算方法简单,主要运算是特征值分解,易于实现。
PCA算法的主要缺点有:
1、主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
2、方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
判断系统是否为线性就看信号是否满足可叠加性。
如果输入x1[n]->y1[n], x2[n]->y2[n],
而当输入为x3[n]=a x1[n]+b x2[n]时,若输出y3[n]=a y1[n]+b y2[n],则该系统为线性的。
故:
v1[n]=y1[n+1]+(n^2)y1[n]
v2[n]=y2[n+1]+(n^2)y2[n]
另v3[n]=a v1[n]+b v2[n]
则v3[n]=y3[n+1]+(n^2)y3[n]
=a(y1[n+1]+(n^2)y1[n])+b(y2[n+1]+(n^2)y2[n])
=ay1[n+1]+by2[n+1]+(n^2)(a y1[n]+b y2[n])
所以得到:
y3[n]=a y1[n]+b y2[n]
所以系统是线性的。
扩展资料:
线性判别分析这种方法使用统计学,模式识别和机器学习方法,试图找到两类物体或事件的特征的一个线性组合,以能够特征化或区分它们。所得的组合可用来作为一个线性分类器,或者,更常见的是,为后续的分类做降维处理。
是一种经典的线性学习方法,在二分类问题上最早由Fisher在1936年提出,亦称Fisher线性判别。线性判别的思想非常朴素:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异样样例的投影点尽可能远离。
在对新样本进行分类时,将其投影到同样的直线上,再根据投影点的位置来确定新样本的类别。LDA与方差分析(ANOVA)和回归分析紧密相关,这两种分析方法也试图通过一些特征或测量值的线性组合来表示一个因变量。
然而,方差分析使用类别自变量和连续数因变量,而判别分析连续自变量和类别因变量(即类标签)。逻辑回归和概率回归比方差分析更类似于LDA,因为他们也是用连续自变量来解释类别因变量的。
LDA的基本假设是自变量是正态分布的,当这一假设无法满足时,在实际应用中更倾向于用上述的其他方法。LDA也与主成分分析(PCA)和因子分析紧密相关,它们都在寻找最佳解释数据的变量线性组合。LDA明确的尝试为数据类之间不同建立模型。
模式识别又常称作模式分类,从处理问题的性质和解决问题的方法等角度,模式识别分为有监督的分类和无监督的分类两种。二者的主要差别在于,各实验样本所属的类别是否预先已知。一般说来,有监督的分类往往需要提供大量已知类别的样本。
模式还可分成抽象的和具体的两种形式。前者如意识、思想、议论等,属于概念识别研究的范畴,是人工智能的另一研究分支。我们所指的模式识别主要是对语音波形、地震波、心电图、脑电图、、照片、文字、符号、生物传感器等对象的具体模式进行辨识和分类。
参考资料:线性判别分析_
本程序定义了主曲线和确定主曲线的实际算法。多边形线算法的基本运算法则是首先确定一条直线段,然后在循环算法中通过不断加入新的顶点来增加线段的数量。在加入一个新的顶点以后,所有的顶点位置在一个内部的环中被更新。由算法所产生的曲线如图1,在这个例子中,PL运算法则和HS运算法则在计算的复杂程度和算法的完善程度上作出了比较。4段和15段,由在半圆上任意两个坐标点加入单独的高斯误差而产生。
PL算法[12]在由NIST19号专有数据库产生的单独数据元构成的图像中得到了测试。我们发现PL算法可以有效的找出没有环和分叉的图像的中间轴。这个在图2中有显示。由于中间轴可能是一些曲线连接而成而不是只有一条曲线,所以在这里我们扩展了PL算法,找出数据元的主曲线。扩展了的算法也包含了实现分段线性骨架的两个原则,一种获取字符图像近似轮廓的初始化方法和一系列用来改善由初始化方法获得的骨架结构质量的更改结构工作。为了避免混淆,我们用术语“骨架”来表示近似性中间轴的二元图像,我们把由PL算法产生出的连接曲线看做模板骨架
应用
主曲线以前被用在图像处理领域。这种图像用来描述在卫星拍摄下的冰川及其轮廓。其主程序用了一个闭合的曲线来估算冰川的轮廓。专家们除去了HS算法[13]中不合适的部分,并且用更完善的粗略估算冰川轮廓的程序来取代HS算法的初始化步骤。此外,采用数据元集合,而不是HS算法所产生的点或线的集合,向中间轴集中的方式来扩展现有的聚合算法。初始化的曲线由SOM算法[12]的一个变量产生,在SOM算法中相互关系被定义为字符图像的一个最小二叉树。HS算法用来使曲线与模板相对应。下一步的要点与SOM算法的更新规则类似。
利用主曲线实现分段线性骨架的方法被Mahmoud、Datta和Parui[14]等人所提出。同样的方法,在SOM算法中用来最优化分段线性骨架的顶点位置。算法在构建骨架方面采用“自顶向下”的策略:近似性地从一个线性拓扑出发,然后逐步加入环和交叉到骨架中,骨架是由基于SOM算法的当前几何样式得出的。SOM算法涉及到一个获取字符图像分段线性骨架的运算法则。这种运算法则以ISODATA算法[12]为基础,ISODATA算法近似于SOM算法。
目的
主曲线算法的目的是找出与字符图像相对应的光滑的分段线性曲线。这些曲线在某个顶点彼此连接,因而在字符图像的中心平面范围内形成一个欧几里德曲线。一个欧几里德曲线G(V,S)在空间中由变量V和S确定,
主曲线算法从一个基于传统稀释方法的初始化工作开始。初始曲线找出字符图像的近似拓扑结构,然而,它不是平滑的,而且它通常包含许多假的分叉和不适合的结构元素。为了解决这两个问题,在前两步中间增加了更改结构的步骤(图3)使得主曲线算法更加有效。在更改结构步骤中,我们运用一些操作手段来调整曲线骨架结构的不完整的地方。\(a)图是在初始化步骤后由主曲线算法生成的曲线骨架;(b)图是经过首次拟合-光滑步骤后生成的曲线骨架;(c)图是经过更改结构后生成的曲线骨架;(d)图是第二次拟合-光滑步骤后产生的曲线骨架(算法输出)。我们重复使用PL算法的扩展版本来构造光滑的骨架曲线,同时保持曲线与字符图像的轮廓的距离近似相等。算法建立在最小能量函数的基础之上
研究动机与意义
自1904年Spearman[13]提出线性主成分分析方法以来,由于这种方法简单且便于使用,至今还是数据统计分析的重要工具之一。线性主成分分析的原理是将数据集合投影到一个矢量,使得投影的均方差最大,由此,将这个矢量称为数据集合的第一主成分。正是这个考虑,在均方差的意义下,这个方法有两个重要的优点:其一,数据集合可以使用一个矢量来描述,从而达到减小信息描述长度的目的,其二,计算第一以及依次主成分,可以变换为求解基于数据自相关矩阵的特征值方程。另外,第一与依次主成分矢量保持正交关系,这意味着,与主成分矢量平行的矢量具有与主成分相同的性质。正是这两个原因,加上在统计上以均方差为保证,主成分分析得到广泛的应用。 由于信息描述长度与信息保持性之间存在矛盾,相对较长的信息描述长度,较短描述长度的信息描述是以损失信息保持性为代价的,而主成分分析的本质是一种在均方差意义下的统计平均。尽管它可以获得较短的信息描述长度,但是,信息保持性的代价相当大,由于信息保持性是对数据分布的规律性认识,因此,对某些问题,这个代价可接受的,但是,另外一些问题,可能就不能接受了。例如,对原始语音信号的分析,单纯的主成分分析就不一定有效。 为了说明信息描述长度与信息保持性之间的关系,下图是一个简单的例子。图5是由300个包含误差的数据点构成的余弦状分布,图5(a)的直线是数据的第一主成分线,其对余弦数据的描述长度显然较图5(b)要短,因为这些数据点将使一个线段描述,因此,只需给出线段起点和终点即可,可以认为图5(a)给出了一个短描述长度的关于数据集合的描述;显然,图5(b)对数据的信息保持性则比图5(a)要好,一方面,它与数据间的距离均方差也要小,另一方面,它勾画出原始信息的轮廓。图5(b)恰恰是本文所讨论的根据主曲线原理所获得的结果。那么,两种描述哪一个更为合理呢?显然,这没有一个一般性的答案,这取决于所需解决问题的需求。
图5 信息描述长度与信息保持之间的关系
图5也说明无监督学习较监督学习困难的原因,问题本身的病态定义导致不得不引入复杂性思想,如统计学习理论中的风险结构最小、贝叶斯学派中的贝叶斯信息准则、Kolmogrov算法[11]复杂度引出的最小描述长度等等,来寻求在信息保持性与数据描述长度之间的折衷。目前,尽管在主曲线的研究中,还存在着大量的数学问题,但是,由于其暗示的广泛应用前景,已引起计算机科学家的关注,现在应用方面已有大量的报道,如线性对撞机中对电子束运行轨迹的控制、图像处理中辨识冰原轮廓、手写体的主曲线模板化、语音识别中对声音数据的约简建模和数据可听化、生态学中寻找种群的有序分布及过程监控。同时,在认知领域Seung[14]提出感知以流形方式存在,并在神经生理学上发现整个神经细胞群的触发率可以由少量的变量组成的函数来描述,如眼的角度和头的方向,这隐含了神经元群体活动性是由其内在的低维结构所控制。主曲线本身是流形的一维形式。
原理、发展脉络以及应用
为了说明主曲线的原理、发展脉络以及应用,首先介绍其原始动机是必要的。Hastie在他关于主曲线的开创性论文中描述了其研究动机,Hastie认为主曲线与非线性回归方法的发展上具有对称性,分别是线性主成分分析与线性回归分析的非线性推广模型,Hastie写到:类似于线性回归方法的非线性推广,使用光滑曲线代替线性主成分总结数据,以求出对称变量之间的曲线,这样的曲线从数据的中部光滑地通过,且不限制于对数据的光滑线性平均,甚至不限制于数据的中部是直线,只希望使得数据点集合到曲线的正交距离最小。这个陈述清晰地指出了他的研究与主成分分析和回归分析的区别,并给出了建模的统计目标。同时,从这个陈述中也可以看出,基于直线的主成分分析只是主曲线的一个特例。因此,主曲线的提出,可以理解为基于线性的主成分分析方法向更精确描述实际世界的非线性分析方法的推广。 应该指出的是,目前,“向非线性”推广是数据统计分析的研究主流,但是,存在着不同的技术路线。
分类
最典型的研究大致可以分为两类:
其一,根据统计学习理论中的核技术,将数据集合映射到特征空间,然后,在特征空间计算数据集合的主成分,称为核主成分分析(KPCA),这个技术路线的本质还是线性主成分分析。
其二,从数据本身的分布出发,希望找到能最好描述数据内在结构的概率分布模型,如生成式拓扑映射(Generative Topographic Mapping,缩写为GTM),矢量量化(VQ)及主曲线,以及流形拟合等。提出“主曲线的研究与回归分析有何区别”是自然的,两者的动机都是企望求出一个函数代替数据集合,但是,两者有本质的差别:其一,一般地说,回归分析是假设数据集合的变量有因果关系,换句话说,数据的变量可以表示为一个因果关系的函数,有些是自变量,有些则是因变量。其二,回归分析一般需要给定一个数学基函数,回归分析是根据数据集合中变量的因果关系,计算这个数学基函数待定的参数。这与主曲线的研究动机完全不同。对于前者,主曲线的研究目标是解决数据变量没有必然因果关系的问题,更重要的是后者,认为事先假定数据服从某种分布(如正态分布)的方法(这与给定数学基函数,根据数据确定参数的方法类似),对某些未知世界的解释是不合理的,因为这个假设可能是错误的,为了保证数据分析不是假设在一个错误结构下,主曲线的研究强调非参数分析。当然,这并不是完全否定了参数法这一经典方法,事实上,参数法在先验知识明确时存在相当大的好处。总之,根据上述讨论的动机,主曲线是寻找一种几何上直观、理论上完备、就解决的问题而言,这个方法与主成分分析一致,但是,主曲线的目标不是仅仅寻找一个数据集合的脊梁骨,而是希望获得数据集合的骨架。数据集合的脊梁骨可以使用线性的方法解决,但骨架就需要借助非线性方法了。应该强调的是,主曲线继承了主成分分析的众多思想,它是主成分分析的非线性推广。另外,尽管这个方法似乎与回归分析的目标类似,都是试图获得对数据集合信息长度更短的表示,但是,这个方法与回归分析完全不同,最大的差别是它不是事先给定一个基函数(或假定一个分布),从而将问题变换为参数估计问题,而是一种非参数的方法
PCA是一种无参数的数据降维方法,在机器学习中很常用,这篇文章主要从三个角度来说明PCA是怎么降维的分别是方差角度,特征值和特征向量以及SVD奇异值分解。
推导主要来源于下面网址的这篇文章,是通过方差和协方差矩阵来说明:
http://blogcodinglabsorg/articles/pca-tutorialhtml
PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
在上面网址的文章中,从头到尾发明了一遍PCA我觉得很有借鉴意义。我们知道PCA是一种数据降维的方法,在降低维度的过程中,我们当然想要保留更多的特征,PCA就是经过数学推导,保留最多特征同时降维的方法。
在推导之前要先知道几个基础知识:
两个维数相同的向量的内积被定义为:
假设A和B是两个n维向量,我们知道n维向量可以等价表示为n维空间中的一条从原点发射的有向线段,为了简单起见我们假设A和B均为二维向量,则A=(x 1 ,y 1 ),B=(x 2 ,y 2 )。则在二维平面上A和B可以用两条发自原点的有向线段表示,见下图:
到这里还是看不出内积和这东西有什么关系,不过如果我们将内积表示为另一种我们熟悉的形式:
下面我们继续在二维空间内讨论向量。上文说过,一个二维向量可以对应二维笛卡尔直角坐标系中从原点出发的一个有向线段。例如下面这个向量:
在代数表示方面,我们经常用线段终点的点坐标表示向量,例如上面的向量可以表示为(3,2),这是我们再熟悉不过的向量表示。
不过我们常常忽略, 只有一个(3,2)本身是不能够精确表示一个向量的。 我们仔细看一下, 这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2。 也就是说我们其实 隐式引入了一个定义:以x轴和y轴上正方向长度为1的向量为标准。 那么一个向量(3,2)实际是说在x轴投影为3而y轴的投影为2。注意投影是一个矢量,所以可以为负。
更正式的说, 向量(x,y)实际上表示线性组合 :
我们之所以默认选择(1,0)和(0,1)为基,当然是比较方便,因为它们分别是x和y轴正方向上的单位向量,因此就使得二维平面上点坐标和向量一一对应,非常方便。 但实际上任何两个线性无关的二维向量都可以成为一组基, 所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量。
例如,(1,1)和(-1,1)也可以成为一组基。一般来说,我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了!实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。例如,上面的基可以变为(1/√2,1/√2)和(-1/√2,1/√2)
现在,我们想获得(3,2)在新基上的坐标,即在两个方向上的投影矢量值,那么根据内积的几何意义,我们只要分别计算(3,2)和两个基的内积,不难得到新的坐标为(5/√2,-1/√2)。下图给出了新的基以及(3,2)在新基上坐标值的示意图:
另外这里要注意的是,我们列举的例子中基是正交的(即内积为0,或直观说相互垂直),但可以成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质, 所以一般使用的基都是正交的。
一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。 (新基按行,向量按列)
特别要注意的是,这里R可以小于N,而R决定了变换后数据的维数。也就是说, 我们可以将一N维数据变换到更低维度的空间中去 , 变换后的维度取决于基的数量。因此这种矩阵相乘的表示也可以表示降维变换。
最后,上述分析同时给矩阵相乘找到了一种物理解释: 两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。 更抽象的说,一个矩阵可以表示一种线性变换。很多同学在学线性代数时对矩阵相乘的方法感到奇怪,但是如果明白了矩阵相乘的物理意义,其合理性就一目了然了。
我们从上面的矩阵乘法与基变换可以看出,当新基的维数小于原来的维数时可以做到数据的降维,但是究竟如何选择新基就是我们现在面临的问题,我们想要选择一个维数更小的新基,同时新基保留有更多的信息。我们知道矩阵向新基投影的形式,也就是PCA是将一组N维的特征投影到K维(K<N)同时保留更多的特征。
那么怎么衡量更多的特征,也就是投影后尽量少的重叠,投影值尽可能分散。
这种投影值的分散数学上可以用方差表示。方差公式这里不表, 所以PCA现在的问题就变成了,寻找K维的新基,使得数据变换到这组基上后方差值最大。
从二维到一维的降维,只需要找到一个一维基使得方差最大,但是三维降到二维呢?我们需要找到两个基让这个三维数据投影到两个基上,如果我们找方差最大的两个基,会发现他们完全一样或者线性相关,这和一个基没什么区别,不能表达更多的信息,所以我们需要添加限制条件,我们希望这两个基彼此线性无关,扩展到K个基也是一样。
在数学上使用协方差表示两个向量的相关性,在我们将均值归一化为0后,协方差可以表示为:
=\frac{1}{m}\sum_{i=1}^{m}a_ib_i)
m为向量的元素数。可以看到,在字段均值为0的情况下,两个字段的协方差简洁的表示为其内积除以元素数m。
当协方差为0时,表示两个字段完全独立。为了让协方差为0,我们选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。
至此,我们得到了降维问题的优化目标: 将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。
上面我们导出了优化目标,但是这个目标似乎不能直接作为操作指南(或者说算法),因为它只说要什么,但根本没有说怎么做。所以我们要继续在数学上研究计算方案。
我们看到,最终要达到的目的与字段内方差及字段间协方差有密切关系。因此我们希望能将两者统一表示,仔细观察发现,两者均可以表示为内积的形式,而内积又与矩阵相乘密切相关。于是我们来了灵感:
假设我们只有a和b两个特征,那么我们将它们按行组成矩阵X:
然后我们用X乘以X的转置,并乘上系数1/m:
这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵的。
根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:
设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设C=1/mXX T ,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。
根据上述推导,我们发现要达到优化目前,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。这样说可能还不是很明晰,我们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系:
设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导一下D与C的关系:
现在事情很明白了!我们要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说, 优化目标变成了寻找一个矩阵P,满足PCP T 是一个对角矩阵 ,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。
由上文知道,协方差矩阵C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列非常好的性质:
1)实对称矩阵不同特征值对应的特征向量必然正交。
2)设特征向量λ重数为r,则必然存在r个线性无关的特征向量对应于λ,因此可以将这r个特征向量单位正交化。
由上面两条可知,一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为e 1 ,e 2 ,,e n ,我们将其按列组成矩阵:
则对协方差矩阵C有如下结论:
其中Λ为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。以上结论不再给出严格的数学证明,对证明感兴趣的朋友可以参考线性代数书籍关于“实对称矩阵对角化”的内容。
到这里,我们发现我们已经找到了需要的矩阵P:
P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照Λ中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。
至此我们完成了整个PCA的数学原理讨论。
在我的文章特征值和特征向量中说过,特征值反映了矩阵对于特征向量的拉伸程度,只有拉伸而没有旋转,也就是在特征向量方向上的作用程度,所以在PCA中我们选取前K个特征向量组成新基进行投影,就是因为原特征在前K个特征向量有最大的作用程度,投影过后可以保留更多的信息,作用程度是用特征值表示的,所以我们可以使用下面的式子表示贡献率,贡献率是表示投影后信息的保留程度的变量,可以用下面的式子表示:
也就是特征值的总和比上前K个特征值,一般来说贡献率要大于85%。
上面的推导中我们看到
其实就是对于D的奇异值分解。但是其实两者还有一些区别:
1) SVD可以获取另一个方向上的主成分,而PCA只能获得单个方向上的主成分:
隐语义索引(Latent semantic indexing,简称LSI)通常建立在SVD的基础上,通过低秩逼近达到降维的目的。
注意到PCA也能达到降秩的目的,但是PCA需要进行零均值化,且丢失了矩阵的稀疏性。
通过SVD可以得到PCA相同的结果,但是SVD通常比直接使用PCA更稳定。因为PCA需要计算X T X的值,对于某些矩阵,求协方差时很可能会丢失一些精度。例如Lauchli矩阵:
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据
courser里吴恩达的PCA的习题就不错。
加校正因子的主成分自身对照法
测定杂质含量时,可釆用加校正因子的主成分自身对照法。在建立方法时,按各品种项下的规定,精密称(量)取待测物对照品和参比物质对照品各适量,配制待测杂质校正因子的溶液,进样,记录色谱图,按下式计算待测杂质的校正因子。

式中 cA为待测物的浓度;
AA为待测物的峰面积或峰高;
cB为参比物质的浓度;
AB为参比物质的峰面积或峰高。
也可精密称(量)取主成分对照品和杂质对照品各适量,分别配制成不同浓度的溶液,进样,记录色谱图,绘制主成分浓度和杂质浓度对其峰面积的回归曲线,以主成分回归直线斜率与杂质回归直线斜率的比计算校正因子。
校正因子可直接载入各品种项下,用于校正杂质的实测峰面积,需作校正计算的杂质,通常以主成分为参比,采用相对保留时间定位,其数值一并载入各品种项下。
测定杂质含量时,按各品种项下规定的杂质限度,将供试品溶液稀释成与杂质限度相当的溶液,作为对照溶液,进样,记录色谱图,必要时,调节纵坐标范围(以噪声水平可接受为限)使对照溶液的主成分色谱峰的峰高约达满量程的10%~25%。除另有规定外,通常含量低于05%的杂质,峰面积测量值的相对标准偏差(RSD)应小于10%;含量在05%~2%的杂质,峰面积测量值的RSD应小于5%;含量大于2%的杂质,峰面积测量值的RSD应小于2%。然后,取供试品溶液和对照溶液适量,分别进样。
维基百科介绍:主成分分析(英语:Principal components analysis,PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。
说了和没说一样……我们还是通过一个简单的案例引出PCA的作用吧。
如果我们在6个小鼠样本中检测一个基因 Gene1 的表达
我们很容易看出来,基因 Gene1 在小鼠1-3中表达比较相似,而在小鼠4-6中表达比较相似
如果同时检测两个基因
我们可以将不同小鼠样本标记在二维坐标轴中,并且看出小鼠1-3的整体表达比较相似,而小鼠4-6的整体表达比较相似
将基因数目扩增到3个时候,我们依然可以通过三维坐标轴标记出不同样本的分布
但是如果将基因数目增加到4个或4个以上时候,很难继续增加坐标轴的维度来绘图(思维空间已经超出一般人的认知了)。
所以 我们可以通过PCA的降维方法来处理这种4维或者多维数据,将其绘制为二维图像来比较不同样本之间的关系 。
PCA是如果进行降维的呢?
首先我们只检测6个不同小鼠的2个基因,那么我们可以分别计算出所有小鼠 Gene1 和 Gene2 的平均值(红色叉号)。根据这些均值,可以获得所有数据的中心(蓝色叉号)。
然后我们将数据整体移动,数据的中心于原点重合。虽然所有的数据点都移动了,但是每个数据点的相对距离没有改变,只是数据的中心变为原点 (0,0) 。
接下来,我们会绘制一条通过原点的直线。这条直线可以360°旋转,直至同数据匹配最佳。
那么如何判断 最佳匹配 呢?这个标准是——
PCA将所有的数据点投射到这条直线上,并且计算这些数据点投射到直线上的距离(使这些距离最小)和投射点到原点的距离(使这些距离最大)
实际上计算c会简单一些,所以PCA一般是通过计算所有数据点到原点距离平方和sum( )最大值来寻找最优解。
如下图所示,分别将这6个样本的投射点到原点距离标记为d1,d2,,d6,然后计算这些点的平方和,这些平方和也被称为SS距离,即 。
获得SS最大值时的这条线,被称为 PC1 。假设PC1这条线的斜率为025,这意味着每当我们在 Gene1 前进4个单位时,PC1上的数据点在 Gene2 上就增加1个单位。
这也意味着这几个样本在 Gene1 上更加分散,而在 Gene2 上分散程度较小。
根据鸡尾酒配方来思考PC1,为生成PC1,我们加入了4份 Gene1 和1份 Gene2 ,这也说明在描述数据的分散程度方面, Gene1 更加重要。
在数学上,这种鸡尾酒配方被称为 Gene1 和 Gene2 的线性组合,或也可以说“PC1是几个变量的线性组合”。
在PCA中,将SS称为PC1的 特征值 (Eigenvalue);PC1特征值的平方被称为PC1的 奇异值 (Singular Value)。
根据上面的假设,PC1的斜率为025,如果下图的红色箭头是一个长度单位,那么它是有097个Gene1和0242个Gene2构成,所以 被称为 特征向量 (Eigenvector)或奇异向量(Singular vector)。
而每个基因的比例,被称为PC1的 载荷分数 (loading score)
在二维坐标中,PC2是一条通过原点,并且与PC1 垂直 的直线。
很容易计算出PC2的斜率为-4,那么PC2就是由-0242个Gene1和097个Gene2构成了。
同时,我们也可以计算出PC2的特征值。
旋转坐标轴,将PC1水平,PC2垂直。黑色叉表示原始的样本6,那么在新的坐标系中,Sample6的分布如下图所示。
各个主成分的变异度(Variation)计算,方法是SS除以样本减1。
假如上面那个案例中PC1变异度为15,PC2的变异度为3,那么总变异度为18
因此PC1在总变异中所占的比值为83%,PC2占的总变异为17%。
如果我们有3个基因,根据前面描述的步骤,分别找出PC1、PC2(垂直于PC1)和PC3(同时垂直于PC1和PC2),
同时也可以计算出各个主成分的变异度。
在上面的案例中,只使用PC1和PC2可以解释94%的变异度,所以我们只保留PC1和PC2最终绘图
这样,我们就获得了最终降维之后的结果。
在进行PCA降维之前,需要确保所有数据处于同一标准下。
例如下面这组数据,Math分数是按照百分制统计,而Reading分数是按照十分制统计。
那么我们在计算PC1时可能会得到PC1由099个Math和01个Reading组成,但是这仅仅是由于Math分数本身就是Reading分数的10倍。
所以我们需要 首先将每一个变量除以其所在组的标准差进行标准化处理 。
上面的那个案例中,我们只有两组观测数据。
绘制完PC1和PC2后,还可以绘制出PC3吗?
根据之前的讲述,PC3是同时垂直于PC1和PC2的。
那么绘制PC3时,基于已有的数据,先去寻找垂直于PC1的直线,只会得到PC2。
寻找垂直于PC2的直线,也只会得到PC1。
所以无法绘制出PC3。
如果上面的案例中,Math和Reading是100%相关的
绘制完PC1后,绘制一条垂直于PC1的PC2时发现,所有的数据投射在PC2的点都是原点,即特征值为0。
这时,PC1能够100%解释所有的变异。所以此时仅有PC1一个主成分。
如果学生数目减少为2,那么数据的分布在二维平面只有2个点,
2个点仅可以构成一条直线,所以PC2的特征值必然为0。
即使增加一个观测指标Gym,如果只有两个学生的话,最终数据在三维空间只有两个点,所以也只会有一个主成分PC1。
扩展一下,如果数据变为3个学生和3个观测指标,最终会有几个主成分呢?
3个学生会产生3个数据点,3点构成一个平面(平面是二维的),所以PC3的特征值必然为0。
因此会产生2个主成分PC1和PC2。
所以, 一组数据进行降维分析时,主成分数最终等于变量数目或样本数目(二者较小的那个),但是上限是特征值大于0的PC数 。
欢迎分享,转载请注明来源:品搜搜测评网