PCA 原理:为什么用协方差矩阵

PCA 原理:为什么用协方差矩阵PCA 的理论知识以及与 K L 变换的关系 PCA 是主成分分析 PrincipalCom 的简称 这是一种数据降维技术 用于数据预处理 一般我们获取的原始数据维度都很高 那么我们可以运用 PCA 算法降低特征维度 这样不仅可以去除无用的噪声 还能减少很大的计算量 K L 转换 Karhunen Lo veTransform 是建立在统计特性基础上的一种转换 它是均方

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

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

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

PCA 原理:为什么用协方差矩阵

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

 

PCA的主要步骤

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

样本矩阵X=PCA 原理:为什么用协方差矩阵

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

         PCA 原理:为什么用协方差矩阵

 

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

PCA 原理:为什么用协方差矩阵

 

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

PCA 原理:为什么用协方差矩阵

PCA 原理:为什么用协方差矩阵

 

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

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

 

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

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

 

 

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

PCA 原理:为什么用协方差矩阵

PCA 原理:为什么用协方差矩阵

 

PCA的设计思路

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

 

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

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

PCA 原理:为什么用协方差矩阵

 

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

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

 

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

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

PCA 原理:为什么用协方差矩阵

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

PCA 原理:为什么用协方差矩阵

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

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

 

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

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

综上所述,

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

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

 

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

PCA 原理:为什么用协方差矩阵

PCA 原理:为什么用协方差矩阵

 

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

PCA 原理:为什么用协方差矩阵

 

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

 

————————————————————————————————————-

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

下面便是推导过程:

PCA 原理:为什么用协方差矩阵

PCA 原理:为什么用协方差矩阵

PCA 原理:为什么用协方差矩阵

 

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

PCA 原理:为什么用协方差矩阵

 

 

 

根据:

PCA 原理:为什么用协方差矩阵

 

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

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

 

 

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

 

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

 

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

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

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219708.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:04
下一篇 2026年3月17日 下午10:04


相关推荐

  • CheckSum 计算工具1——bin文件

    CheckSum 计算工具1——bin文件

    2021年8月27日
    614
  • Mac 如何强制关机?「建议收藏」

    Mac 如何强制关机?「建议收藏」在通常情况下,MacOSX是非常稳定的,但是它偶尔也会发点小脾气,出现应用程序没有响应的情况。如果你正在运行的应用程序失去响应,强制退出一般都能解决,但是偶尔也会出现整个系统都失去响应,鼠标不能用,这时候你只能强制关机了。楼主使用Mac2年多了,只遇到过一次死机哈。下面介绍两种强制关机的解决办法:1、不用学就明白的,跟windows一样的,长按电源键不放,五秒之后电脑就会强行切断电源。不过它有个坏处,就是可能会损坏系统文件,所以建议不要使用这种方法。2、同时按住control+.

    2022年6月26日
    53
  • 工程PMO工作

    工程PMO工作

    2021年12月31日
    44
  • javascript UniqueID属性

    javascript UniqueID属性nbsp nbsp nbsp 在 Web 页中的每个 HTML 元素都一个 ID 属性 ID 作为其标示 在我们的普通理解中它应该是 unique 的 可是 HTML 元素的 ID 属性是可写的 这就造成了我们很可能人为的使 ID 的重复 按么如果 ID 重复了怎么办呢 我们又怎么来给 HTML 元素弄一个唯一的标示呢 nbsp nbsp nbsp 由于 IE 对格式混乱 不完整的或有错嵌套关系 的 HTML 代码由极好的容错性 对于 HTML 元素的 ID 重复问题对它来说简直就是小菜一碟

    2026年3月16日
    2
  • ClassIn 退出专注学习模式 关闭专注学习模式「建议收藏」

    ClassIn 退出专注学习模式 关闭专注学习模式「建议收藏」ClassIn是一个常用的在线上课软件,从3.0.2.130开始推出了“专注学习模式”,窗口会全屏且不能切换窗口。可有时我们有其他需要,要退出专注学习模式,这时就要使用其它的方法了。这里提供一个我自己做的小程序。

    2022年5月24日
    106
  • beanshell脚本语法_shell脚本实战pdf免费

    beanshell脚本语法_shell脚本实战pdf免费本文内容是BeanShell入门教程的中文化主要包含了以下内容1.快速入门2.基本语法3.脚本方法4.脚本对象5.范围值快速入门1.下载和运行BeanShell我们可以在http://www.beanshell.org上下载到BeanShell的最新版本,而且可以在图形化桌面模式或者命令行模式下运行。如果你只是想下载下来玩玩看,那么双击JAR文件,运行桌面版的就可以了。但是,或许你更想以后长期使用…

    2025年6月18日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号