协方差矩阵与主成成分分析(整理后)

上传人:平*** 文档编号:16829440 上传时间:2017-11-09 格式:DOCX 页数:11 大小:123.66KB
返回 下载 相关 举报
协方差矩阵与主成成分分析(整理后)_第1页
第1页 / 共11页
协方差矩阵与主成成分分析(整理后)_第2页
第2页 / 共11页
协方差矩阵与主成成分分析(整理后)_第3页
第3页 / 共11页
协方差矩阵与主成成分分析(整理后)_第4页
第4页 / 共11页
协方差矩阵与主成成分分析(整理后)_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《协方差矩阵与主成成分分析(整理后)》由会员分享,可在线阅读,更多相关《协方差矩阵与主成成分分析(整理后)(11页珍藏版)》请在金锄头文库上搜索。

1、统计学的基本概念统计里最基本的概念就是样本的均值,方差,或者再加个标准差。首先我们给你一个含有 n 个样本的集合 ,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该知道吧,一带而过。均值:标准差:方差:很显然,均值描述的是样本集合的中间点,它告诉我们的信息是很有限的,而标准差给我们描述的则是样本集合的各个样本点到均值的距离之平均。以这两个集合为例,0,8,12,20和8,9,11,12 ,两个集合的均值都是 10,但显然两个集合差别是很大的,计算两者的标准差,前者是 8.3,后者是 1.8,显然后者较为集中,故其标准差小一些,标准差描述的就是这种“散布度” 。之所以除以 n-1 而不是

2、除以 n,是因为这样能使我们以较小的样本集更好的逼近总体的标准差,即统计上所谓的“无偏估计” 。而方差则仅仅是标准差的平方。为什么需要协方差?上面几个统计量看似已经描述的差不多了,但我们应该注意到,标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集,最简单的大家上学时免不了要统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解更多,协方差就是这样一种用来度量两个随机变量关系的统计量,我们可以仿照方差的定义:来度量各个维度偏离其均值的程度,标准差可以这么来定义:协方差的结果有什么意义呢?如果结果为正值,则说明两者是正

3、相关的(从协方差可以引出“ 相关系数” 的定义 ),那必须的结果为负值就说明负相关的,如果为 0,也是就是统计上说的“相互独立” 。从协方差的定义上我们也可以看出一些显而易见的性质,如:协方差多了就是协方差矩阵上一节提到的猥琐和受欢迎的问题是典型二维问题,而协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如 n 维的数据集就需要计算个协方差,那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有 三个维度,则协方差矩阵为可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。Matlab

4、 协方差实战上面涉及的内容都比较容易,协方差矩阵似乎也很简单,但实战起来就很容易让人迷茫了。必须要明确一点,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。这个我将结合下面的例子说明,以下的演示将使用Matlab,为了说明计算原理,不直接调用 Matlab 的 cov 函数(蓝色部分为 Matlab代码)。首先,随机产生一个 10*3 维的整数矩阵作为样本集,10 为样本的个数,3 为样本的维数。1MySample = fix(rand(10,3)*50)根据公式,计算协方差需要计算均值,那是按行计算均值还是按列呢,我一开始就老是困扰这个问题。前面我们也特别强调了,协方差矩阵是计

5、算不同维度间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列为一个维度,所以我们要按列计算均值。为了描述方便,我们先将三个维度的数据分别赋值:123dim1 = MySample(:,1); dim2 = MySample(:,2); dim3 = MySample(:,3);计算 dim1 与 dim2,dim1 与 dim3,dim2 与 dim3 的协方差:123sum( (dim1-mean(dim1) .* (dim2-mean(dim2) ) / ( size(MySample,1)-1 ) % 得到 74.5333 sum( (dim1-mean(dim1) .* (d

6、im3-mean(dim3) ) / ( size(MySample,1)-1 ) % 得到 -10.0889 sum( (dim2-mean(dim2) .* (dim3-mean(dim3) ) / ( size(MySample,1)-1 ) % 得到 -106.4000搞清楚了这个后面就容易多了,协方差矩阵的对角线就是各个维度上的方差,下面我们依次计算:123std(dim1)2 % 得到 108.3222 std(dim2)2 % 得到 260.6222 std(dim3)2 % 得到 94.1778这样,我们就得到了计算协方差矩阵所需要的所有数据,调用 Matlab 自带的cov

7、函数进行验证:1cov(MySample)把我们计算的数据对号入座,是不是一摸一样?Update:今天突然发现,原来协方差矩阵还可以这样计算,先让样本矩阵中心化,即每一维度减去该维度的均值,使每一维度上的均值为 0,然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1) 即可。其实这种方法也是由前面的公式通道而来,只不过理解起来不是很直观,但在抽象的公式推导时还是很常用的!同样给出 Matlab 代码实现:1X = MySample - repmat(mean(MySample),10,1); % 中心化样本矩阵,使各维度2均值为 0 C = (X*X)./(size(X,1)-1);总结

8、理解协方差矩阵的关键就在于牢记它计算的是不同维度之间的协方差,而不是不同样本之间,拿到一个样本矩阵,我们最先要明确的就是一行是一个样本还是一个维度,心中明确这个整个计算过程就会顺流而下,这么一来就不会迷茫了P.S.写论文要选 Latex,在 wordpress 里编辑公式还得用 Latex,用 Latex 还真对得起咱学计算机这张脸自从上次谈了协方差矩阵之后,感觉写这种科普性文章还不错,那我就再谈一把协方差矩阵吧。上次那篇文章在理论层次介绍了下协方差矩阵,没准很多人觉得这东西用处不大,其实协方差矩阵在好多学科里都有很重要的作用,比如多维的正态分布,再比如今天我们今天的主角主成分分析(Princ

9、ipal Component Analysis,简称 PCA)。结合 PCA 相信能对协方差矩阵有个更深入的认识PCA 的缘起PCA 大概是 198x 年提出来的吧,简单的说,它是一种通用的降维工具。在我们处理高维数据的时候,为了能降低后续计算的复杂度,在“预处理” 阶段通常要先对原始数据进行降维,而 PCA 就是干这个事的。本质上讲,PCA 就是将高维的数据通过线性变换投影到低维空间上去,但这个投影可不是随便投投,要遵循一个指导思想,那就是:找出最能够代表原始数据的投影方法。这里怎么理解这个思想呢?“ 最能代表原始数据 ”希望降维后的数据不能失真,也就是说,被 PCA 降掉的那些维度只能是那

10、些噪声或是冗余的数据。这里的噪声和冗余我认为可以这样认识: 噪声:我们常说“ 噪音污染 ”,意思就是“噪声”干扰我们想听到的真正声音。同样,假设样本中某个主要的维度 A,它能代表原始数据,是 “我们真正想听到的东西” ,它本身含有的 “能量”(即该维度的方差,为啥?别急,后文该解释的时候就有啦)本来应该是很大的,但由于它与其他维度有那么一些千丝万缕的相关性,受到这些个相关维度的干扰,它的能量被削弱了,我们就希望通过 PCA 处理后,使维度 A 与其他维度的相关性尽可能减弱,进而恢复维度 A 应有的能量,让我们“听的更清楚”! 冗余:冗余也就是多余的意思,就是有它没它都一样,放着就是占地方。同样

11、,假如样本中有些个维度,在所有的样本上变化不明显(极端情况:在所有的样本中该维度都等于同一个数),也就是说该维度上的方差接近于零,那么显然它对区分不同的样本丝毫起不到任何作用,这个维度即是冗余的,有它没它一个样,所以 PCA 应该去掉这些维度。 这么一分析,那么 PCA 的最终目的就是“降噪”和消灭这些“冗余” 的维度,以使降低维度的同时保存数据原有的特征不失真。后面我们将结合例子继续讨论。协方差矩阵PCA 实现的关键前面我们说了,PCA 的目的就是“降噪”和“去冗余 ”。“降噪”的目的就是使保留下来的维度间的相关性尽可能小,而“去冗余” 的目的就是使保留下来的维度含有的“能量”即方差尽可能大

12、 。那首先,我们得需要知道各维度间的相关性以及个维度上的方差!那有什么数据结构能同时表现不同维度间的相关性以及各个维度上的方差呢?自然是非协方差矩阵莫属。回忆下 浅谈协方差矩阵的内容,协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。协方差矩阵的主对角线上的元素是各个维度上的方差(即能量),其他元素是两两维度间的协方差(即相关性) 。我们要的东西协方差矩阵都有了,先来看“降噪” ,让保留下的不同维度间的相关性尽可能小,也就是说让协方差矩阵中非对角线元素都基本为零。达到这个目的的方式自然不用说,线代中讲的很明确矩阵对角化。而对角化后得到的矩阵,其对角线上是协方差矩阵的特征值,它还有两个

13、身份:首先,它还是各个维度上的新方差;其次,它是各个维度本身应该拥有的能量(能量的概念伴随特征值而来)。这也就是我们为何在前面称“方差” 为“能量”的原因。也许第二点可能存在疑问,但我们应该注意到这个事实,通过对角化后,剩余维度间的相关性已经减到最弱,已经不会再受“噪声” 的影响了,故此时拥有的能量应该比先前大了。看完了“降噪” ,我们的“去冗余”还没完呢。对角化后的协方差矩阵,对角线上较小的新方差对应的就是那些该去掉的维度。所以我们只取那些含有较大能量(特征值)的维度,其余的就舍掉即可。PCA 的本质其实就是对角化协方差矩阵。下面就让我们跟着上面的感觉来推推公式吧。假设我们有一个样本集 X,

14、里面有 N 个样本,每个样本的维度为 d。即:将这些样本组织成样本矩阵的形式,即每行为一个样本,每一列为一个维度,得到样本矩阵 S: 。我们先将样本进行中心化(将样本中每一个元素都减去样本的均值。 中心化的意思其实是使样本数据在零点附近波动。),即保证每个维度的均值为零,只需让矩阵的每一列除以对应的均值即可。很多算法都会先将样本中心化,以保证所有维度上的偏移都是以零为基点的。然后,对样本矩阵计算其协方差矩阵,按照浅谈协方差矩阵里末尾的 update,我们知道,协方差矩阵可以简单的按下式计算得到:下面,根据我们上文的推理,将协方差矩阵 C 对角化。注意到,这里的矩阵 C是是对称矩阵,对称矩阵对角

15、化就是找到一个正交矩阵 P,满足:。具体操作是:先对 C 进行特征值分解,得到特征值矩阵(对角阵)即为 ,得到特征向量矩阵并正交化即为 。显然, 。假如我们取最大的前 p(pd)个特征值对应的维度,那么这个 p 个特征值组成了新的对角阵,对应的 p 个特征向量组成了新的特征向量矩阵 。实际上,这个新的特征向量矩阵 就是投影矩阵,为什么这么说呢?假设 PCA降维后的样本矩阵为 ,显然,根据 PCA 的目的, 中的各个维度间的协方差基本为零,也就是说, 的协方差矩阵应该为 。即满足:而我们又有公式:代入可得:由于样本矩阵 的每一行是一个样本,特征向量矩阵 的每一列是一个特征向量。右乘 相当于每个样

16、本以 的特征向量为基进行线性变换,得到的新样本矩阵 中每个样本的维数变为了 p,完成了降维操作。实际上, 中的特征向量就是低维空间新的坐标系,称之为“主成分” 。这就是“主成分分析”的名称由来。同时, 的协方差矩阵 为近对角阵,说明不同维度间已经基本独立,噪声和冗余的数据已经不见了。至此,整个 PCA 的过程已经结束,小小总结一下:1. 形成样本矩阵,样本中心化 2. 计算样本矩阵的协方差矩阵 3. 对协方差矩阵进行特征值分解,选取最大的 p 个特征值对应的特征向量组成投影矩阵 4. 对原始样本矩阵进行投影,得到降维后的新样本矩阵 Matlab 中 PCA 实战首先,随机产生一个 10*3 维的整数矩阵作为样本集,10 为样本的个数,3 为样本的维数。1S = fix(rand(10,3)*50);计算协方差矩阵:1234S = S - repmat(mean(S),10,1); C = (S*S)./(size(S,1)-1); or C

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号