一、一些概念

线性相关:其中一个向量可以由其他向量线性表出。

线性无关:其中一个向量不可以由其他向量线性表出,或者另一种说法是找不到一个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的更多相关文章

  1. 机器学习实战基础(二十三):sklearn中的降维算法PCA和SVD(四) PCA与SVD 之 PCA中的SVD

    PCA中的SVD 1 PCA中的SVD哪里来? 细心的小伙伴可能注意到了,svd_solver是奇异值分解器的意思,为什么PCA算法下面会有有关奇异值分解的参数?不是两种算法么?我们之前曾经提到过,P ...

  2. PCA算法和SVD

    如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值.这里可以将特征值为负,特征向量旋转180度,也可看成方向不变,伸缩 ...

  3. 主成分分析(PCA)与SVD奇异值分解

      主要参考:https://www.zhihu.com/question/38417101/answer/94338598 http://blog.jobbole.com/88208/ 先说下PCA ...

  4. K-L变换和 主成分分析PCA

    一.K-L变换 说PCA的话,必须先介绍一下K-L变换了. K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换.它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hot ...

  5. 特征向量、特征值以及降维方法(PCA、SVD、LDA)

    一.特征向量/特征值 Av = λv 如果把矩阵看作是一个运动,运动的方向叫做特征向量,运动的速度叫做特征值.对于上式,v为A矩阵的特征向量,λ为A矩阵的特征值. 假设:v不是A的速度(方向) 结果如 ...

  6. PCA, SVD以及代码示例

    本文是对PCA和SVD学习的整理笔记,为了避免很多重复内容的工作,我会在介绍概念的时候引用其他童鞋的工作和内容,具体来源我会标记在参考资料中. 一.PCA (Principle component a ...

  7. PCA算法详解——本质上就是投影后使得数据尽可能分散(方差最大),PCA可以被定义为数据在低维线性空间上的正交投影,这个线性空间被称为主⼦空间(principal subspace),使得投影数据的⽅差被最⼤化(Hotelling, 1933),即最大方差理论。

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

  8. PCA降维的原理、方法、以及python实现。

    PCA(主成分分析法) 1. PCA(最大化方差定义或者最小化投影误差定义)是一种无监督算法,也就是我们不需要标签也能对数据做降维,这就使得其应用范围更加广泛了.那么PCA的核心思想是什么呢? 例如D ...

  9. 数据降维技术(1)—PCA的数据原理

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

随机推荐

  1. on事件委托

    on绑定多个事件,off解绑事件,one事件只执行一次 on除了能够处理未来事件,还可以对事件进行委托处理 $('div').on('click', 'p', function(event)(也就是通 ...

  2. http缓存相关头

    https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 这里说的一下我对http控制客户端缓存的头的理解. 在请求一个静态文件的时候(图片,css,js)等 ...

  3. 20145208 《Java程序设计》第0周学习总结

    20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...

  4. 【原】python中文文本挖掘资料集合

    这些网址是我在学习python中文文本挖掘时觉得比较好的网站,记录一下,后期也会不定期添加:   1.http://www.52nlp.cn/python-%E7%BD%91%E9%A1%B5%E7% ...

  5. Java Collection

    在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便.这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结 ...

  6. 线段树 poj 1436

    题目大意:给出n条垂直于x轴的线段的数据y1,y2,x,求出有几个三条线段一组的三元组并且他们兩兩能相见的.思路:对y轴建树,将x排序,然后按顺序边询问边擦入,用mark[i][j]表示j往左可以看到 ...

  7. [React] 多组件生命周期转换关系

    前段时间一直在基于React做开发,最近得空做一些总结,防止以后踩坑. 言归正传,React生命周期是React组件运行的基础,本文主要是归纳多组件平行.嵌套时,生命周期转换关系. 生命周期 Reac ...

  8. 冰冻三尺非一日之寒--rabbitMQ,redis

    第11章 1.rabbitMQ   2. redis 一.rabbitMQ: 人们写了有好多好多的开源的MQ服务器.其中大多数都是写出来用来解决特定问题的.它们不关心上面跑的是什么类型的消息,设计思想 ...

  9. 使用gulp-connect实现web服务器

    安装插件安装gulp-connect插件,安装命令如下 npm install --save-dev gulp-connect 定义web服务,gulpfile.js代码 var gulp = req ...

  10. js判断浏览器类型以及浏览器版本

    判断浏览器类型:   if navigator.userAgent.indexOf(”MSIE”)>0) {} //判断是否IE浏览器 if(isFirefox=navigator.userAg ...