PCA算法原理:为什么用协方差矩阵原创手记

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

综上所述,

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

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

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

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

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

下面便是推导过程:

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

根据:

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

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

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

THE END
1.从算法到模型:走出“技术中立”的话语误区澎湃号·政务在网络文艺中,算法能够决定用户所看到的内容,这在一定程度上塑造用户的审美趣味和文化消费习惯。在此基础上,算法可能放大或掩盖某些审美趣味、情感倾向、艺术类型或主题内容,影响用户的文化消费选择,而过度沉迷和“信息茧房”等负面作用也随之产生。批评者将这些后果归因于算法。但与此同时,还存在一种截然对立的观点。https://www.thepaper.cn/newsDetail_forward_29641793
2.人工智能算法背后的故事:从启发到创新人工智能背后的那些看似神秘的算法,竟然是从大自然的奥秘、科学的启发和人类智慧的碰撞中诞生的?这些算法不仅改变了我们工作的方式,还在悄悄地塑造未来的世界。今天,就让我们一起揭秘,人工智能算法背后的故事,从最初的灵感闪现,到它如何演变成引领创新的核心力量!人工智能算法的灵感常常来自我们日常生活中的平凡现象。https://it.sohu.com/a/839485940_121188207
3.深度学习算法工程师为什么叫做炼丹算法炼丹师深度学习算法工程师为什么叫做炼丹 算法 炼丹师 作者:时晴 Focal Loss 针对类别不平衡问题,用预测概率对不同类别的loss进行加权。Focal loss对CE loss增加了一个调制系数来降低容易样本的权重值,使得训练过程更加关注困难样本。 loss = -np.log(p) loss = (1-p)^G * losshttps://blog.51cto.com/u_16213634/8910759
4.什么叫结构化的算法为什么要提倡结构化的算法结构工程师将算法分解成模块化的部分。这样做可以增强代码的清晰度和可维护性,提高编程效率。提倡结构化算法,因为https://www.bkw.cn/zcjls/ask/4577918.html
5.陈景辉:算法之治:法治的另一种可能性?对法律算法化与算法之治的欢迎,明显属于后一种乐观态度。这是因为,一方面,算法原本就是信息科技与人工智能的技术底色,另一方面,法治本来就是关于一个国家或一个社群的整体性公共理想。 但为什么会有这种乐观态度?我认为,主要理由有两个:弱的人工智能与强的工具性。但严格说来,它们其实是同一件事情的不同侧面:https://www.legal-theory.org/?mod=info&act=view&id=26587
6.什么是区块链共识算法?共识算法有哪些?区块链技术区块链以太坊区块链目前基于工作量共识算法,但是最终Casper协议将被推出以将网络从工作量共识切换到权益共识,以尝试增加网络的可扩展性。 为什么共识算法对于加密货币至关重要 就如同前面所说,共识算法对于维护加密货币网络的完整性和安全性至关重要。它们提供了一种分布式节点就正确版本的区块链达成共识的方法。对当前的区块链https://www.jb51.net/blockchain/770722.html
7.最优页面置换算法既然都不能实现,为什么还能叫算法–PingCode最优页面置换算法(Optimal Page Replacement Algorithm)是一种理论上的模型,它能确保最低的页面置换频率、减少缺页异常次数、提高系统性能。之所以称之为算法,是因为它确实定义了一套处理页面置换问题的规则和流程。尽管在实际操作系统中因为无法预知未来的页面访问序列而难以实现,但它仍然作为评价和比较其他页面置换算法的https://docs.pingcode.com/ask/201126.html
8.JavaScript数据结构和算法JS为什么要学习数据结构和算法 数据结构和算法对于很多前端工程师来说,一直觉得是可有可无的,但其实不然,个人觉得,前端工程师其实是最需要重视数据结构和算法的人,因为前端所做的东西是用户访问网站第一眼看到的东西,特别在移动浪潮到来之后,对用户体验越来越高,对前端提出了更高的要求,面对越来越复杂的产品,需要坚实https://download.csdn.net/blog/column/7041520/89069584
9.「递归」第9集我在腾讯做研究腾讯云开发者社区我们为什么叫「递归」 “递归” (recursion) 是一种在程序设计语言中被广泛使用的算法。它有两大特点,一是调用自己,二是化繁为简。我们当中那些优秀的技术人又何尝不是如此?他们以身作则,用实际行动影响身边的人,规范了流程、提高了效能,使整个团队从中得益。这就是我们「递归」栏目的初心,记录平凡腾讯技术人的https://cloud.tencent.com/developer/article/1716089
10.数据结构与算法为什么要使用算法李灵晖今天来说说为什么需要使用算法? 算法是什么?算法是:指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能https://www.cnblogs.com/raylee2007/p/4774563.html
11.为何开展算法敏捷治理?如何落地?近日,阿里研究院和阿里巴巴人工智能治理与可持续发展研究中心(AAIG)邀请清华大学公管学院教授薛澜团队多位成员一同座谈,就算法治理、算法公平、算法透明等话题进行深入探讨。电子科技大学公共管理学院副教授、清华大学产业发展与环境治理研究中心研究员贾开老师,分享了《算法敏捷治理的挑战与解决方案》的思考。 http://www.aliresearch.com/ch/information/informationdetails?articleCode=390669866845212672&organName=null&type=%E6%96%B0%E9%97%BB¶meter=null
12.11消息认证码(MAC)前缀MAC算法的问题使得人们想出了一系列非常聪明的变种。例如,为什么不将key放在后面呢(t=H(m||k)),或者为什么前面放一下,后面放一下(t=H(k||m||k)) 值得说明的是这些都至少和前缀MAC一样好,但是他们都同样拥有严重的问题。例如后缀MAC系统会更加暴漏hash函数的弱点,一个成功的碰撞攻击会打破MAC。三明治MAhttps://www.jianshu.com/p/2bfa98f475c0
13.为什么说slam技术不等于智能导航?SlamtecD*算法则是一种 动态 启发式路径搜索算法,它事先对环境位置,让机器人在陌生环境中行动自如,在瞬息万变的环境中游刃有余。D*算法的最大优点是不需要预先探明地图,机器人可以和人一样,即使在未知环境中,也可以展开行动,随着机器人不断探索,路径也会时刻调整。 https://www.slamtec.com/ko/News/Detail/145
14.算法与数据结构02(基础篇)——时间复杂度简谈算法的复杂性体现在为什么算法要注意复杂度? 算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度。 基本概念 大O表示法 1. 用常数1取代运行时间中所有常数 3->1 ;例:去定执行3次、6次、2次标记为 O(1) https://juejin.cn/post/6844904111809249293
15.关于算法多样化的若干问题的思考研究过程一、为什么要提倡和鼓励算法多样化 首先是计算教学的目的发生了变化。 过去计算教学的目的是使学生具有整、小、分数四则计算的能力。把公认的规范和有效的算法教给学生并配上大量的计算练习,是达到这个目的的基本途径。为了便于教和练,一般更重视基本算法的掌握。 http://www.hlsx.wj.czedu.cn/html/article816629.html
16.深度学习Adam那么棒,为什么还对SGD念念不忘?一文看懂深度学习为什么会这样?平平淡淡才是真的吗?1 框架回顾优化算法 首先,让我们回顾一下各种优化算法。 深度学习优化算法经验 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 这样的发展过程。谷歌可以看到很多教程文章,详细告诉你这些算法是如何一步一步演变的。在这里,我们改变主意,用框架梳理所有优化算法https://www.tulingxueyuan.cn/tlzx/jsp/2226.html