PCA本质和SVD
一、一些概念
线性相关:其中一个向量可以由其他向量线性表出。
线性无关:其中一个向量不可以由其他向量线性表出,或者另一种说法是找不到一个X不等于0,能够使得AX=0。如果对于一个矩阵A来说它的列是线性无关的,则AX=0,只有0解,此时矩阵A可逆。
秩:线性无关向量个数。
基:
特征向量:向量X经过矩阵A旋转后,与原来的X共线,。
即为特征值,表示向量的伸缩。如果把矩阵看成进行线性变化的矩阵(旋转,拉伸),那么特征向量就是这样一种向量,它经过这种特定的变换后保持方向不变,只是进行长度上的伸缩而已。反过来,特征向量组成的正交底恰恰也是一种变换,将矩阵从一个空间映射到另一个空间。
特征分解:
如果矩阵A是对称矩阵,那会得到一个更强的特征分解,A可实现U对角化,即正交对角化。特征向量U正交:
二、PCA的本质(协方差矩阵对角化,对称矩阵特征分解)
数据量太大的时候,需要降维。怎么降呢?需要保证维度减少,但同时信息量保留的最多,转换成数学术语就是每个行向量的方差尽可能大(方差代表信息),行向量间的协方差为0(让行与行之间尽量不相关,信息尽量转移到某几个单独的变量上,从而实现降维)。下面以矩阵X为例进行讲解,假设拿到的数据是矩阵X ,
它的协方差矩阵则为(标准化数据以后):
有两步需要做1.现在希望的是降维后的协方差矩阵对角元尽可能大(信息量足够多),非对角元尽可能为0(行与行之间无关,如果相关说明没有降维成功),即变成一个对角矩阵。因此我们需要对X做一个线性变换,使得做线性变换后的矩阵的协方差矩阵变成对角矩阵(相当于变化新的坐标)。而怎么线性变换呢?具体如下图,使得Q=Ut时,Cy就会变成一个对角矩阵,这时候需要用到前面的特征值分解,因为Cx是对称矩阵,所以可以进行特征分解:
2.Cy变成对角矩阵后,我们如何降维呢?此时需要将对角元上的特征值进行排序,此时可以把特征值小的那部分对应的信息丢掉,此时就达到了降维的目的。特征值此时代表的就是信息量的大小。具体如下图中的例子:
Python中用到的代码:
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
pca就是寻找协方差矩阵的特征值,特征向量,找到方向最大的变异方向(特征向量),再找到跟它正交的,如此下去找到n个主成分。需要先标准化,因为是通过最大化线性组合方差得到,所以对变量的测量尺度敏感。
三、SVD分解(奇异矩阵分解)
前面讲到的对称矩阵的分解才能实现正交对角化(UT=U-),而对称矩阵是建立在Rn*n的空间,而对于任意秩为R的矩阵A属于Rm*n的空间时,能不能找到类似的分解呢?答案是可以滴,这就是SVD分解了, 为奇异值,且大于0。
SVD与特征分解有没有什么关系呢?
奇异值就是A*AT非零的特征值开根号。在PCA应用中,协方差矩阵是正定矩阵,而正定矩阵(一定是对称矩阵)的奇异分解实质等价于特征分解。
SVD同样可以进行降维。
PCA本质和SVD的更多相关文章
- 机器学习实战基础(二十三):sklearn中的降维算法PCA和SVD(四) PCA与SVD 之 PCA中的SVD
PCA中的SVD 1 PCA中的SVD哪里来? 细心的小伙伴可能注意到了,svd_solver是奇异值分解器的意思,为什么PCA算法下面会有有关奇异值分解的参数?不是两种算法么?我们之前曾经提到过,P ...
- PCA算法和SVD
如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值.这里可以将特征值为负,特征向量旋转180度,也可看成方向不变,伸缩 ...
- 主成分分析(PCA)与SVD奇异值分解
主要参考:https://www.zhihu.com/question/38417101/answer/94338598 http://blog.jobbole.com/88208/ 先说下PCA ...
- K-L变换和 主成分分析PCA
一.K-L变换 说PCA的话,必须先介绍一下K-L变换了. K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换.它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hot ...
- 特征向量、特征值以及降维方法(PCA、SVD、LDA)
一.特征向量/特征值 Av = λv 如果把矩阵看作是一个运动,运动的方向叫做特征向量,运动的速度叫做特征值.对于上式,v为A矩阵的特征向量,λ为A矩阵的特征值. 假设:v不是A的速度(方向) 结果如 ...
- PCA, SVD以及代码示例
本文是对PCA和SVD学习的整理笔记,为了避免很多重复内容的工作,我会在介绍概念的时候引用其他童鞋的工作和内容,具体来源我会标记在参考资料中. 一.PCA (Principle component a ...
- PCA算法详解——本质上就是投影后使得数据尽可能分散(方差最大),PCA可以被定义为数据在低维线性空间上的正交投影,这个线性空间被称为主⼦空间(principal subspace),使得投影数据的⽅差被最⼤化(Hotelling, 1933),即最大方差理论。
PCA PCA(Principal Component Analysis,主成分分析)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量 ...
- PCA降维的原理、方法、以及python实现。
PCA(主成分分析法) 1. PCA(最大化方差定义或者最小化投影误差定义)是一种无监督算法,也就是我们不需要标签也能对数据做降维,这就使得其应用范围更加广泛了.那么PCA的核心思想是什么呢? 例如D ...
- 数据降维技术(1)—PCA的数据原理
PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...
随机推荐
- 一个页面从输入URL到页面加载显示完成,这个过程都发生了什么?
对于网址栏的URL不同的操作方式有不同的加载资源.获取数据的方式,下面的详细过程针对"在地址栏输入URL,按enter(回车)键加载资源"此种操作方式做解析,其它的方式的过程大同小 ...
- HDU2767Proving Equivalences[强连通分量 缩点]
Proving Equivalences Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- weka
第一次接触weka这个东西,貌似是数据挖掘用的比较多.接下来一个月里,希望能够对weka有更深一步的了解,并用博客记录下学习weka用法.原理.数据预处理的过程,与君分享,期待!
- Spring AOP深入剖析
一.通过代理工厂模式配置通知 ①.前置通知.后置通知: 定义某接口:ISomeService,并自定义方法 public interface ISomeService { public void tr ...
- 适配iOS10的哪些事 ---- 学习笔记八
一. 上传了一个版本,为什么没有构建版本? 解:info.plist中的Bundle version 与上一个版本一致或少于上一个版本,上线新版本时,Bundle version和Bundle ... ...
- 【别人的老师VS你的老师 】同样是老师,差别怎么这么大呢!?
- 利用 lucene.net 实现高效率的 WildcardQuery ,记一次类似百度搜索下拉关键字联想功能的实现。
打开百度输入 站内搜索也要实现类似功能.最基础的做法,写个方法查数据库搜索历史综合表keywordSearch(先将被搜索过的关键字记录到一张表,记录好他们被搜索的次数.上次搜索的有多少结果) 大概 ...
- python 小练手
监控 主动监控 - 服务器端轮询客户端 被动监控-客户端agent上报到服务器端 混合模式---两种都支持 需求 1个性化的监控需求 2每个服务的监控间隔不同 3混合模式的监控
- Maven随记
如何保持依赖的多个jar保持版本一致 在引入依赖的时候常常需要依赖多个独立的模块, 譬如Spring的content, aop等等, 为了保持版本一致, 可以设置<spring.version& ...
- Win10 PC一周年更新正式版14393.447 32位/64位更新补丁KB3200970下载 Flash补丁Kb3202790下载
微软在今天凌晨推送了Win10 PC一周年更新正式版14393.447,本次更新补丁代号为KB3200970,面向Win10一周年更新正式版的PC用户. 更新日志 • 提升了多媒体音频.远程桌面以及I ...