机器学习---之PCA为什么使用协防差矩阵

2023-10-08 10:50

本文主要是介绍机器学习---之PCA为什么使用协防差矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PCA为什么要用协方差矩阵?

原创 2015年11月29日 19:04:07

       PCA方法是数据降维的重要手段之一,方法比较简单,就是将样本数据求一个维度的协方差矩阵,然后求解这个协方差矩阵的特征值和对应的特征向量,将这些特征向量按照对应的特征值从大到小排列,组成新的矩阵,被称为特征向量矩阵,也可以称为投影矩阵,然后用改投影矩阵将样本数据转换。取前K维数据即可,实现对数据的降维。

       假设样本数据有r维(组成一个r维向量),共有n个样本。组成r*n矩阵A,矩阵每一列是一个样本,行是各个不同的特征维度。求解协方差矩阵S=AAT(最好先将A进行每个维度上的数据进行中心化A→C再求协方差矩阵S=CCT),S是r*r的方阵,用X(j)表示样本数据的第j维数据,则求解协方差矩阵




其中表示两个维度之间的协方差

很显然S是个对称矩阵,求解S的特征向量以及对应的特征值,按照特征值大小依次排列特征向量,将这些特征向量(列向量)组成一个矩阵,被称为转换矩阵或者投影矩阵。如果只取前K列特征向量组成的矩阵P,再把原样本数据用投影矩阵转换到新的坐标空间A’=PTA,可以实现数据的降维。

 

△为什么要用协方差矩阵来做呢?

       虽然PCA降维方法我很早就知道,但是最近实验室老师让我看稀疏PCA方法解决他的三维人体建模的问题。我心里默默地在想,样本数据固定了,以上的S不就是定了吗?为神马还出来一个稀疏PCA?于是我就抱着理解原理本质的心理来重新看PCA,然后就发现一个关键的问题:PCA为什么要用协方差矩阵的特征向量矩阵来做投影矩阵呢?为神马啊为神马?想不通……这样做出来的投影矩阵一定能保证样本数据投影到另一个坐标系后,前几个坐标的值保证是最大特征?然后我找啊找,终于找到一个资料,尼玛……终于拨云见日啊~现在我用自己的理解用浅显易懂的描述来说明为嘛用协方差矩阵?!


在说PCA的协方差矩阵之前我们先来说说投影矩阵。


1. 关于投影矩阵/变换矩阵

       一个向量经过变换矩阵,只要变化矩阵的基分量之间是相互线性无关的就可以实现转换,什么叫线性无关呢?想象一下三维空间向量(a, b, c),每个基向量不共线就算是线性无关,当然还有一个条件,就是不能共面啊(不然其中一个基向量就可以用其他基向量来组合表示,他们组成的向量矩阵就不是满秩,不是3只有2)。扩展到N维空间就是N个基向量,每个基向量都不能由其他基向量线性组合得到。这种线性无关基向量组成的变换矩阵肯定是可逆的(方阵N*N的秩为N),可逆就可以实现两个坐标系的相互转换啊~


坐标转换1:

V1V2...Vn(均为列向量)是一组标准正交基,x1 x2..... xn是在该基下的一个坐标。则V1*x1+V2*x2+…+Vn*x={y1 y2......yn}T为该点在新基下的坐标。

其中这组新基为{1, 0, ..., 0}T,{0, 1, ..., 0}T…{0, 0, ..., 1}T


坐标转换2:

       若想将 {y1 y2......yn}T转换为在某个基V1V2...Vn下的坐标,只需左乘{V1V2...Vn}-1即可。

       一个样本在投影矩阵P的作用下,转换到另一个坐标空间,相当于求得该样本向量在P不同列向量的投影坐标。

       一个坐标系转换到另一个坐标系,转换矩阵其实不需要标准化(向量单位化,即向量的模为1),也不需要正交基的矩阵(两两向量正交,即相乘为0),只要满足上述“线性无关”的要求,数据就可以从一个度量空间转换到另一个空间,而且可以相互转换A'=P*A,A=P-1A',转换矩阵为P,而A和A'是两个空间中的不同表示。只是正交基和标准基会有一些好处:

  • 如果P是标准化矩阵,由于P-1P=I(恒等式),PTP=I(标准化矩阵性质),就会有PT=P-1,求解坐标转换速度更快,因为求转置矩阵比求逆矩阵快很多。
  • 如果P是正交矩阵,基向量两两正交,说明两个向量相关性很小,相当于数据在这两个维度上的相关性很小。线性无关不等于不相关,一个基向量在另一个基向量上有投影值,说明
  • 更进一步,标准正交矩阵更好,结合了以上两个优点,所以PCA求出来的特征向量矩阵是标准正交矩阵是一个大大大好的东西。

 

2. 协方差矩阵:

       【我们希望去除的信息:

       1. 噪声:我们常说“噪音污染”,意思就是“噪声”干扰我们想听到的真正声音。同样,假设样本中某个主要的维度A,它能代表原始数据,是“我们真正想听到的东西”,它本身含有的“能量”(即该维度的方差),本来应该是很大的,但由于它与其他维度有那么一些千丝万缕的相关性,受到这些个相关维度的干扰,它的能量被削弱了,我们就希望通过PCA处理后,使维度A与其他维度的相关性尽可能减弱,进而恢复维度A应有的能量,让我们“听的更清楚”! 

       2. 冗余:冗余也就是多余的意思,就是有它没它都一样,放着就是占地方。同样,假如样本中有些个维度,在所有的样本上变化不明显(极端情况:在所有的样本中该维度都等于同一个数),也就是说该维度上的方差接近于零,那么显然它对区分不同的样本丝毫起不到任何作用,这个维度即是冗余的,有它没它一个样。

       降维的目的就是“降噪”和“去冗余”。“降噪”的目的就是使保留下来的维度间的相关性尽可能小,而“去冗余”的目的就是使保留下来的维度含有的“能量”即方差尽可能大。那首先的首先,我们得需要知道各维度间的相关性以及个维度上的方差啊!那有什么数据结构能同时表现不同维度间的相关性以及各个维度上的方差呢?自然是协方差矩阵!

       协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。协方差矩阵的主对角线上的元素是各个维度上的方差(即能量),其他元素是两两维度间的协方差(即相关性)。我们要的东西协方差矩阵都有了,先来看“降噪”,让保留下的不同维度间的相关性尽可能小,也就是说让协方差矩阵中非对角线元素都基本为零。达到这个目的的方式自然不用说,线代中奖的很明确——矩阵对角化。】

       以上就是为什么要用协方差矩阵的原因!

【而对角化后得到的矩阵,其对角线上是协方差矩阵的特征值,它还有两个身份:

  • 首先,它还是各个维度上的新方差;
  • 其次,它是各个维度本身应该拥有的能量(能量的概念伴随特征值而来)。
这也就是我们为何在前面称“方差”为“能量”的原因。也许第二点可能存在疑问,但我们应该注意到这个事实,通过对角化后,剩余维度间的相关性已经减到最弱,已经不会再受“噪声”的影响了,故此时拥有的能量应该比先前大了。

看完了“降噪”,我们的“去冗余”还没完呢。对角化后的协方差矩阵,对角线上较小的新方差对应的就是那些该去掉的维度。所以我们只取那些含有较大能量(特征值)的维度,其余的就舍掉即可。


       那为什么协方差矩阵求解出来的特征矩阵就能做到以上这点呢?且说我们的目的是:协方差矩阵“对角化”,不如说是我们需要找到一个转换矩阵,使得新的协方差矩阵能够尽量的对角化,即找到一个转换矩阵P使得A→A'=PA,使得新的协方差

       S=(A')(A') T = (PA) (PA)T= (PA)(ATPT) = P(AAT)PT= Λ (Λ为对角矩阵)

       下面就是数学求解的问题。

 

3. PCA与SVD关系

       如果P是一个标准正交矩阵,以上的P(AAT)PT=Λ可以转化为:P-1P(AAT)PTP= P-1ΛP 即S=AAT= P-1ΛP看出什么了吗?看出什么了吗?这就是矩阵SVD分解啊……

 

SVD

a)方阵的分解

      Sr*r方阵,则存在以下矩阵分解

其中U的列为S的特征向量,Λ为对角矩阵,其中对角线上的值为S的特征值,按从大到小排列:

 

      如果S是对称方阵,则存在

      其中U的列为矩阵S单位正交特征向量仍表示对角矩阵,其中对角线上的值为S的特征值,按从大到小排列。最后,QT=Q-1,因为正交矩阵的逆等于其转置

 

b)奇异值分解

      上面讨论了方阵的分解,但是在LSA中,我们是要对Term-Document矩阵进行分解,很显然这个矩阵不是方阵。这时需要奇异值分解对Term-Document进行分解。奇异值分解的推理使用到了上面所讲的方阵的分解。

      假设Am*n矩阵,Um*m矩阵,其中U的列为AAT的正交特征向量,Vn*n矩阵,其中V的列为ATA的正交特征向量,再假设rA矩阵的秩,则存在奇异值分解:

A= UΣVT

其中AATATA的特征值相同,为λ1,λ2, …, λr

Σm*n,其中,其余位置数值为0Σii的值按大小降序排列。以下是Σ的完整数学定义:

       σi称为矩阵A的奇异值。

      A乘以其转置矩阵AT得:AAT=(UΣVT)(VΣUT)=UΣ2UT正是在上面讨论过的对称矩阵的分解。

      奇异值分解的图形表示:


从图中可以看到Σ虽然为m*n矩阵,但从第n+1行到m行全为零,因此可以表示成n*n矩阵,又由于右式为矩阵相乘,因此U可以表示为m*n矩阵,VT可以表示为n*n矩阵。

 

       回归到PCA,需要找到一个转换矩阵P使得P(AAT)PT=Λ也就是对S=AAT= P-1ΛP进行对称矩阵的分解,由以上知识得:P-1为矩阵S的标准正交特征向量的逆矩阵,所以先求解AAT的标准正交特征向量(列向量为特征向量),求逆只要求转置即可。

       以上就是为什么要用协方差矩阵以及它对应的特征向量原理。end!

 

参考资料:

1. http://wenku.baidu.com/link?url=Q28-Q3AuNGAtO6Rq3UxvkZ3AlvRnZaPChnKDoZxfmUKa09HHPeVI4rVpIBr4S7u3DtxPLqMyoWaa-N5K-7FIB0cyqQuufXEQ1ghBQo2-lLS

2. http://blog.csdn.net/wangran51/article/details/7408414

3. http://www.cnblogs.com/tclikang/archive/2012/12/05/2803506.html

4. http://blog.csdn.net/sunuechao/article/details/12717771

5. http://m.blog.csdn.net/blog/Lu597203933/45898411

转载:http://blog.csdn.net/babywong/article/details/50085239

读上面文章总结:

  • PCA的目的:1.就是为了减少一些相关性比较大的特征向量(同一样本间的降噪),2.降低冗余性(不同样本间的同一维特征,它们之间基本上没什么差别,即它对分类的贡献不大),防止过拟合。
  • 做法:既然要减少一些相关性比较大的特征,第一步就要计算,每个维度相关性比较大的特征啊
  • 用到:所以就要用到协防差矩阵咯,找每个维度特征之间的相关性
  • 找到了后怎么办?:找到了后,要使相关性降低或者根本部相关啊,那就把协防差矩阵除对角线以外的元素都置0,也就是将协防差矩阵对角化。
  • 如何对角化?:那就是通过一个矩阵变换,使原始矩阵变成新的矩阵,这个新的矩阵的协防差矩阵是对角矩阵就好了
  • 如何变换?:就是找到和原始矩阵相乘的矩阵,其实通过上文可以发现,就是协防差矩阵的特征矩阵。
  • 结果:这样一乘后除对角线以外的元素基本上都归0了,也就是同一样本间各个维度的相关性已经降到了最低,即完成了降噪。
  • 不够:为什么不够呢,因为之前只是完成了降噪,却没有完成减少冗余啊,冗余是不同样本间的。
  • 怎么减少冗余呢?:因为协防差矩阵的特征矩阵是的对角线元素是按照特征的从大到小的降序排列的,即各个维度的方差从大到小排列,即冗余性从小到大排列(方差越大,数据浮动越大,越不相似,冗余度越低),所以把那些冗余度高的维度去掉,即方差比较小的维度去掉,所以就是我们常说的降维了。

这篇关于机器学习---之PCA为什么使用协防差矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/164754

相关文章

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存