PCA的理论知识以及与K-L变换的关系

PCA是主成分分析(Principal Components Analysis)的简称。这是一种数据降维技术,用于数据预处理。一般我们获取的原始数据维度都很高,那么我们可以运用PCA算法降低特征维度。这样不仅可以去除无用的噪声,还能减少很大的计算量。

K-L转换(Karhunen-Loève Transform)是建立在统计特性基础上的一种转换,它是均方差(MSE, Mean Square Error)意义下的最佳转换,因此在资料压缩技术中占有重要的地位。K-L转换是对输入的向量x,做一个正交变换,使得输出的向量得以去除数据的相关性。

不过在图像处理上,K-L变换即是PCA变换,两者可以说是没有区别的。(待考证)

PCA的主要步骤

1、输入样本矩阵,大小:m*n。每一行为一个n维样本,共m个,如下图:

样本矩阵X=

取第一行为例,它的下标含义是 行表示样本序号,列表示样本维度。

2、对样本矩阵进行中心化(取均值);

3、计算样本的协方差矩阵;

4、计算协方差矩阵的特征值并取出最大的k个特征值所对应的特征向量,构成一个新的矩阵;

若使用matlab的话直接利用函数eig即可求得,若是用python3的话,借助numpy.linalg.eig函数即可。

5、这个矩阵就是我们要求的特征矩阵(也称特征脸),里面每一列就为样本的一维主成分。把样本矩阵投影到以该矩阵为基的新空间中,便可以将n维数据降低成k维数据。

为了让大家对特征脸有个直观印象,下面将展示提取出来的特征脸结果,略恐怖,注意! (:P)

使用的是ORL人脸库中的实例:共40个人的人脸图片,每人有10张。

PCA的设计思路

从上面PCA的实现步骤可以发现,它的关键步骤便是求出样本协方差矩阵C的特征向量矩阵。可是,为什么要这么做呢?为什么这么做就可以把人脸特征提取出来呢?这是我在学习PCA算法过程中一直思考的问题,经过多方查找资料,对比分析、思考,终于有了一个初步的理解。下面就让我们来一探究竟吧。

上文中提到过,PCA变换其实就是一种降维技术。

什么是降维?降维就是指通过矩阵乘法运算后,把原来的矩阵维度减少。比如

维数减少了,虽然可以大大减少算法的计算量,但是若对基矩阵P选择不当的话就很有可能会导致信息量的缺失。

因此我们要选择哪K个基(这里还不知道是特征向量)才能保证降维后能最大程度保留原有的信息,是进行设计的主方向。

什么是信息呢?根据信息论的定义,我们可以知道信息来源于未知。也就是说如果不同样本的同一维度的值差异特别大,那该维度带给我们的信息量就是极大的。转换成数学语言,也就是说某维度的方差越大,它的信息量越大。

举个例子:假如你有3个人的人脸特征数据,他们均有3个维度:眼睛、鼻子、嘴巴。如果他们鼻子这一维度的数据都是一样的,如下图中,三个人都是大鼻子(方差=0)。那么我们从鼻子这一维度获得的信息量就是为零,因为无法从该维度得知该人脸图像到底属于谁的。

那如果他们鼻子这一维度的数据各不相同,如下图中,三个人分别是大、中、小鼻子(方差很大)。那么我们从鼻子这一维度获得的信息量就很大了,甚至直接用这一个维度就可以识别出是谁的人脸图像。

综上,我们就可以很容易联想到  第一个优化目标:降维后各维度的方差尽可能大。

既然有了第一个,当然就会有第二个啦(我说的是优化目标,别想多啦),我们的第二个优化目标便是保证不同维度之间的相关性为0(其实就是让基向量互相正交)。

因为如果某2个维度间存在相关性,就说明从一个维度的值可以推测出另一个维度的值。说明该维度中有一个是多余的,对我们识别特征帮助不大,那自然可以把其中一个维度舍去。

比如说:如果上面例子中嘴巴与鼻子这两个维度之间存在线性关系(相关性为1,完全相关):对于格式:(y)嘴巴、(x)鼻子,有y=x,x∈[大,中,小]。那么嘴巴这一维度在这里是不是就是冗余的?有它没它都一个样,完全可以通过鼻子的大小推测出嘴巴的大小,进而判断出人脸的身份。

综上所述,

PCA算法的优化目标就是:    ① 降维后同一维度的方差最大

② 不同维度之间的相关性为0

根据线性代数,我们可以知道同一元素的协方差就表示该元素的方差,不同元素之间的协方差就表示它们的相关性。因此这两个优化目标可以用协方差矩阵来表示,如下图:

如下图,根据矩阵的迹的定义:

可以知道优化目标一便是令Cy矩阵的对角线元素之和最大。即max tr(Cy)

-------------------------------------------------------------------------------------------------------------

知道了目标,接下来就好办,我们要做的就是想尽一切办法去达到我们的优化目标。

下面便是推导过程:

PS:拉格朗日乘子法定义如下

根据:

可以看到,最终求得的结果满足特征向量的关系式,因此由C矩阵的特征向量所构成的基矩阵,就是我们要求的变换矩阵。

由该矩阵降维得到的新样本矩阵可以最大程度保留原样本的信息。

至此,问题都已经解决了:信息量保存能力最大的基向量一定是样本矩阵X的协方差矩阵的特征向量,并且这个特征向量保存的信息量就是它对应的特征值的绝对值。这个推导过程就解释了为什么PCA算法要利用样本协方差的特征向量矩阵来降维。
我觉得这正是理解PCA算法的关键点,只要理解了这一点,对PCA算法也就基本掌握了,之后要自己编程实现PCA

人脸识别系统,也就只是按部就班的事了。

这是我用python3.6写的参考代码(基于PCA的人脸识别系统):https://github.com/LJRice/KL-PAC-_face

大家有兴趣的话可以研究一下,若是文章、代码中有哪里不对还请私信我,谢谢观看:D

(PS:该文章只是讲解了PCA的工作原理,不涉及它的具体实现方法。等以后有时间,还会对代码进行详细介绍的。)

PCA 原理:为什么用协方差矩阵相关推荐

  1. PCA原理分析和Matlab实现方法(三)

    PCA主成分分析原理分析和Matlab实现方法(三) [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/68487833   ...

  2. 主成分分析(PCA)原理分析Python实现

    目录 1 引言 2 PCA的意义 3 PCA的实现步骤 4 弄懂PCA要回答的问题 5 PCA原理 5.1 如何降维? 5.2 如何量化投影以后样本点之间的区分度? 5.3 求取k维坐标系 5.3.1 ...

  3. PCA原理分析和意义(二)

    原文链接:http://blog.csdn.net/xl890727/article/details/16898315 在进行图像的特征提取的过程中,提取的特征维数太多经常会导致特征匹配时过于复杂,消 ...

  4. 协方差矩阵与PCA原理深入剖析

    一.协方差矩阵 首先,协方差矩阵一定是实对称阵. 正交矩阵的逆等于矩阵的转置.** 一个维度上方差的定义: 协方差的定义: 协方差就是计算了两个维度之间的相关性,即这个样本的这两个维度之间有没有关系. ...

  5. PCA原理分析和意义(一)

    原文链接:http://blog.codinglabs.org/articles/pca-tutorial.html PCA(Principal Component Analysis)是一种常用的数据 ...

  6. 机器学习之PCA原理

    PCA(principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  7. 主成分分析(PCA)原理详解_转载

    一.PCA简介 1. 相关背景 在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律.多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上 ...

  8. pca主成分分析结果解释_主成分分析(PCA)原理精讲 | 统计学专题

    引言:当数据维度较高时,我们很难通过普通的方法做图,更不能分析样本间的关系.故我们接下来学习降维度.可视化的主成分分析(Principal Component Analysis,PCA). 1.何时使 ...

  9. 基于特征向量的主成分分析(PCA)原理解释

    引子 首先看一下如何对一维向量的进行分解,我们知道,一个 nnn 维向量 aaa 可以由 nnn 个正交向量线性 vi,i=1,2,...,nv_i,i=1,2,...,nvi​,i=1,2,..., ...

最新文章

  1. 非技术成本继续困扰光伏产业
  2. Xcode真机调试(有证书)
  3. 华为×××+IPSEC实现安全连接
  4. Redis单机配置多实例,实现主从同步
  5. 445. 两数相加 II golang
  6. MediaChooser图库浏览器
  7. php随机点名代码怎么做,html座位表随机点名的实例代码
  8. android category 讲解
  9. 项目落地 - 智能焊机,钢塑管(物联网技术应用)
  10. Android实现图片OCR功能
  11. IT行业男性出轨率最高!
  12. MySQL索引底层实现原理 MyISAM非聚簇索引 vs. InnoDB聚簇索引
  13. STM32F407系统标准库函数之时钟配置 和 位带操作
  14. 手机wps怎么设置打印横竖_手机WPS怎么设置横版打印?
  15. 华为手机 运行 linux,Linux 用户玩转华为手机之华为分享
  16. ImageList 导出文件
  17. 2020最新pycharm汉化安装(亲测有效)
  18. 数值积分之龙贝格积分
  19. mac电脑安装nvm
  20. 冷钱包被盗?“这是黑客被黑的最惨的一次”

热门文章

  1. iOS超全开源框架、项目和学习资料汇总(4)数据库、缓存处理、图像浏览、摄像照相视频音频篇...
  2. 详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!
  3. WEB 开发 :HTML+CSS+jquery制作企业网站必备教程
  4. Android工具类— 分享到QQ(QQ空间)、微信(朋友圈)
  5. python+opeyxl:随机抽取人员
  6. 微信小程序如何本地测试太阳码(二维码)分享功能(参数接收调试)
  7. 新发的日常小实验——c#获取windows注册表信息
  8. 计算机等级模拟题库二三级(免费免积分)
  9. 利用python实现Apriori关联规则算法
  10. VC使用TerminateProcess结束进程实例