PCA: Principal Components Analysis,主成分分析。

1、引入

  在对任何训练集进行分类和回归处理之前,我们首先都需要提取原始数据的特征,然后将提取出的特征数据输入到相应的模型中。但是当原始数据的维数特别高时,这时我们需要先对数据进行降维处理,然后将降维后的数据输入到模型中。

  PCA算法是专门用来对高维数据进行降维而设计,通过将高维数据降维后得到的低维数能加快模型的训练速度,并且低维度的特征具有更好的可视化性质。另外,数据的降维会导致一定的信息损失,通常我们可以设置一个损失阀值来控制信息的损失。

  设原始样本集为:,即样本数为m个,每个样例有n个特征维度。

2、预处理

  在使用PCA降维之前,样本集需要满足两个条件:

  1)特征去均值化(即均值零化)。对每个特征,使用当前特征的值减去该维特征的平均值。对第i个样例的第j个特征,计算公式为:

  其中第i个特征的均值为:

  当处理自然图像时,则将每个特征减去图像本身的均值,而不是减去该特征的均值。即:

  为何需要去均值?这主要是去除均值对变换的影响,减去均值后数据的信息量没有变化,即数据的区分度(方差)是不变的。如果不去均值,第一主成分,可能会或多或少的与均值相关。[5]

  2)归一化处理:将不同特征的数据范围归一化到同一范围中,一般将每个值除以当前维的最大值。

3、PCA算法

  PCA算法的核心思想在于找出数据变化的主方向和次方向,如图3.1所示,向量u1 的方向可以认为是数据的主方向,而u2是次方向。

图3.1 数据变化的主次方向[1]

  那么如何得到数据变化的主次方向?假设样本集有m个样例,每个样例有n个特征。样本集可以表示为:

  第i个样例的特征向量表示为:

  则样本集的协方差矩阵为:

  协方差矩阵为n*n大小的方阵,具有n个特征向量。

  其中协方差计算公式为:

  计算协方差矩阵的特征向量及对应的特征值。

  将特征向量按特征值的大小按列排放,组成矩阵u=[u1 u2 … un],对应的特征值由大到小分别为:。则特征向量u1为主特征向量(对应的特征值最大),u2为次特征向量,以此类推。

  对于特征值越大的特征向量,样本集在该方向上的变化越大。对于由特征向量组成的矩阵我们称为特征矩阵,特征矩阵是一个正交矩阵,即满足uTu=uuT=I。

  关于协方差矩阵的计算,以及其中的一些数学原理,可以参考文献[3,4]。

  如何理解协方差矩阵的特征向量为数据变化的主次方向,以及特征值越大,其对应的特征向量方向上的数据变化越大?

  答:使用协方差矩阵计算出来的特征值为其特征向量上的样本集的方差,当方差越大,说明数据集在该特征向量方向上越分散,变化越大,所以该方向就可以用来作为数据集的主方向。

  另外,特征向量之间相互正交,说明各特征之间相关性最小,基本接近0.

  独立==>不相关<==>协方差为零

  至此,我们已经得到了数据变化的主次方向,现在我们需要计算样本在每个特征向量上的长度。对于原始样例x,其在特征向量u1方向上的长度为:

  现在我们使用特征矩阵来对样本进行旋转:

  旋转后的坐标变换成了:(u1, u2, …, un)。

  现在若要将变换后的数据进行恢复,因为特征矩阵为正交矩阵,所以只需左乘特征矩阵的转置即可:

  因为:

PCA算法过程[3]:(样本集有m个样例,每个样例n个特征)

1)将原始数据组成一个n*m大小的矩阵。

2)对矩阵的每行进行零均均值化处理,即对每个特征减去该行的均值。

3)计算协方差矩阵,这个过程叫

4)求出协方差矩阵的所有特征向量及对应的特征值。

5)根据特征值从大到小对应的特征向量,取出前k个特征向量组成一个特征矩阵u。

6)将原始数据旋转到特征矩阵u所在的空间中,,得到的数据即为降维后的结果。

4、损失误差分析

  在上一步中利用协方差矩阵计算得到n个特征向量,但是我们实际上只使用了前k个特征向量,而将后面的n-k个向量直接近似为0。

  直接将后面的特征近似为0会导致一定的损失。K的取值越大,损失的信息就越少,反之损失的信息就会越多。实际上,因为后面近似为0的特征向量对应的特征值是非常的小,故而将后面的特征近似为0不会导致过大的损失。

  具体损失可以用前k个特征值在所有特征值中所占的比例,由于协方差矩阵的特征值为方差,因而特征值之比即为方差百分比:

  其中,

  在处理图像时,一般需要a>=0.99,而其他情况下一般只需a>=0.95即可。

  另外,PCA算法具有缩放不变性,即所有的特征分量被放大或缩小相同的倍数,PCA输出的特征向量不会发生变化。

5、白化操作Whitening(白化算法)[2]

  白化操作主要用来去除各特征之间的关联度,减少特征冗余。比如图像中相邻像素有一定的关联性,很多信息是冗余的,这时去相关可以采用白化操作。

  白化操作主要完成两件事情:首先使得不同特征之间的相关性最小,接近0;其次是所有特征的方差相等。

  常见的白化操作有:

  1)PCA whitening。在利用PCA得到协方差矩阵的特征向量后,取前k个特征向量,各特征向量相互正交,此时相关性最小;再将新数据(旋转后的数据)的每一维除以标准差即得到每一维的方差为1。方差归一化:

  pw: PCA white。

  2)ZCA whitening。首先利用协方差矩阵计算出所有的特征向量后,将所有特征向量取出,再进行方差的归一化操作,最后左乘特征矩阵u(其实相当于把数据还原回去)。

  它并不降低数据维度,而仅仅在PCA白化的步骤中保留所有成分,最后增加了一个旋转的步骤,这样仍然是单位方差。

6、总结

  PCA算法非常巧妙地利用协方差矩阵来计算出样本集在不同方向上的分散程度,利用方差最大的方向作为样本集的主方向。其主要过程是:首先利用样本集及特征构建一个样本矩阵,然后利用样本矩阵计算得到协方差矩阵,再计算协方差矩阵的特征值和特征向量,保留特征值前k大的特征向量作为新的维度方向。再将原始样本数据转换到新的空间维度。

参考文献:

[1] peghoty, http://blog.csdn.net/itplus/article/details/11451327

[2] tornadomeet, http://www.cnblogs.com/tornadomeet/archive/2013/03/21/2973231.html

[3] CodingLabs, http://blog.codinglabs.org/articles/pca-tutorial.html

[4] peghoty, http://blog.csdn.net/itplus/article/details/11452743

[5] viewcode, http://blog.csdn.net/viewcode/article/details/8789524

PCA主成分分析方法的更多相关文章

  1. PCA(主成分分析)方法浅析

    PCA(主成分分析)方法浅析 降维.数据压缩 找到数据中最重要的方向:方差最大的方向,也就是样本间差距最显著的方向 在与第一个正交的超平面上找最合适的第二个方向 PCA算法流程 上图第一步描述不正确, ...

  2. 核主成分分析方法(KPCA)怎么理解?

    先回顾下主成分分析方法.PCA的最大方差推导的结论是,把数据投影到特征向量的方向后,方差具有极大值的.假如先把数据映射到一个新的特征空间,再做PCA会怎样?对于一些数据,方差会更好地保留下来.而核方法 ...

  3. 机器学习之PCA主成分分析

    前言            以下内容是个人学习之后的感悟,转载请注明出处~ 简介 在用统计分析方法研究多变量的课题时,变量个数太多就会增加课题的复杂性.人们自然希望变量个数较少而得到的 信息较多.在很 ...

  4. PCA主成分分析Python实现

    作者:拾毅者 出处:http://blog.csdn.net/Dream_angel_Z/article/details/50760130 Github源代码:https://github.com/c ...

  5. 数据降维-PCA主成分分析

    1.什么是PCA? PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法.PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特 ...

  6. 机器学习 - 算法 - PCA 主成分分析

    PCA 主成分分析 原理概述 用途 - 降维中最常用的手段 目标 - 提取最有价值的信息( 基于方差 ) 问题 - 降维后的数据的意义 ? 所需数学基础概念 向量的表示 基变换 协方差矩阵 协方差 优 ...

  7. PCA主成分分析(上)

    PCA主成分分析 PCA目的 最大可分性(最大投影方差) 投影 优化目标 关键点 推导 为什么要找最大特征值对应的特征向量呢? 之前看3DMM的论文的看到其用了PCA的方法,一开始以为自己对于PCA已 ...

  8. 用PCA(主成分分析法)进行信号滤波

    用PCA(主成分分析法)进行信号滤波 此文章从我之前的C博客上导入,代码什么的可以参考matlab官方帮助文档 现在网上大多是通过PCA对数据进行降维,其实PCA还有一个用处就是可以进行信号滤波.网上 ...

  9. 【建模应用】PCA主成分分析原理详解

    原文载于此:http://blog.csdn.net/zhongkelee/article/details/44064401 一.PCA简介 1. 相关背景 上完陈恩红老师的<机器学习与知识发现 ...

随机推荐

  1. vue数据源转json问题

    开发过程中使用到了vue框架进行前端批量数据的处理,将批量数据转换为json格式进行ajax传参时需要注意将vue数据源得到的json结果进行如下处理,webservice接收json数据时无法有效的 ...

  2. Codeforces Round #349 (Div. 2) C. Reberland Linguistics (DP)

    C. Reberland Linguistics time limit per test 1 second memory limit per test 256 megabytes input stan ...

  3. css float left right 中间空间城数据无法显示

    css float left right 中间空间城数据无法显示 是由于设定了width具体值太小造成,简单用%值或不设置.

  4. android:windowSoftInputMode属性使用 软键盘

    android:windowSoftInputMode="adjustResize|stateHidden" windowSoftInputMode属性设置值说明. <act ...

  5. ASP对数据库的操作方法

    ASP与数据库-连接.写入.修改.删除.显示代码属性与方法 PageCount 属性: 决定 Recordset 对象包括多少“页”的数据.        这里的“页”是数据记录的集合,大小等于 Pa ...

  6. codeforces 665A Buses Between Cities

    简单题 #include<cstdio> #include<cstring> #include<cmath> #include<vector> #inc ...

  7. 要你的祝福.lrc

    要你的祝福(电影<我是路人甲>插曲 试听版) - 李潇潇 午夜的温度慢慢起舞 穿梭的人潮有些荒芜 开始欢呼 开始麻木 谁被谁在安抚 落单的幸福变得模糊 孤单的城市独自起舞 也许满足 也许糊 ...

  8. Windows Server 2012如果打开网页慢下载快的话

    原来Windows server 2012默认打开了ECN功能(貌似从Windows server  2008之后都默认打开),个人操作系统却没有打开,而办公室网络的确拥塞不小,造成了这种效果.好了, ...

  9. mysql时间函数,总是记不住,总是查。

    http://www.cnblogs.com/zeroone/archive/2010/05/05/1727659.html UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) ...

  10. C#平衡树(AVLTree)

    参考:http://www.cnblogs.com/skywang12345/p/3577479.html using System; using System.Collections.Generic ...