详细且透彻的分析PCA原理
前两天面试问到了PCA,感觉讲得不是很透彻,这里再次详细写一下。
首先定义如下变量的含义:
X:Rn*m,n个样本m个属性,对于第i个样本xi:R1*m。
W:Rm*k,k个正交的单位正交的列向量组成的矩阵,投影矩阵,把原来的m维降到k维。对于第i个维度wi:Rm*1。
投影后的样本矩阵X' = X×W:Rn*k,对于投影后的第i个样本xi' = xi×W:R1*k。
我们做PCA的目的是找出一个投影矩阵W(也就是k个单位向量)使得样本投影后的方差最大。其实理解了加粗的这句话,就已经对PCA有相当的了解了。如何理解方差最大?答:方差大说明投影后的样本之间相互分离程度比较好,相比于较小的方差,原样本的特征得到了有效保存。这个方差从数学上表示为投影到各个维度的方差之和。
记住,作PCA之前要做的一件事是对原始样本矩阵X,按列中心化。比如对 Xij ==> Xij-M(j),其中M(j)表示第j列(也就是第j种属性)的均值。为什么要这么做?这是因为这个操作使得X每一列均值为0,可以大大简化后面计算方差的公式。(D(a)=E( (a-avg(a))·(a-avg(a)) ),如果avg(a)=0,那么D(a)=E(a^2))
对投影后的矩阵X' = X×W,因为X被我们按列中心化了,即∑xi=0,那么∑xi' = ∑ (xi×W) = (∑xi)×W = 0,也就是说投影后列均值为0的性质依然得到了保持。
接下来,我们考虑要优化的目标,方差。先考虑将所有样本投影到单个维度wi的情况,即X×wi:Rn*1,他表示这n个样本分别在这一个维度的坐标。
根据上面的分析,有∑ (xi×wi)=0,即E(X*wi)=0,(注意此处要把wi看成是定值)。于是就有了下面的推算:

对所有投影方向的方差进行求和,加上原来每个投影向量长度为1的约束,就得到了我们下面的优化问题。

由于是等式约束,我们很容易就可以写成拉格朗日形式如下,(λ前面漏掉了求和符号,sorry)

是的对wi求导,得到如下(由于λ是拉格朗日乘子,本身它的乘数不需要关心)

显然,△等式的wj和λ的解就是XTX做特征值分解对应的特征向量和特征值。
那么,有了特征值分解后,我们应该选哪些特征向量及其对应的特征值呢? 都知道是从最大的开始选,为什么呢?
对△等式进行简单变化,等式两边同时左乘wjT,变成下面的等式,

注意到,该等式说明了特征值λj对应的就是wj方向投影的方差,而我们的目标是要最大化所有的方差和。可选的范围是固定,显然我们从大的特征值开始选就行了。这就从数学上解释了为什么我们要从大的特征值开始进行选择(面试的时候问到了,当时只进行感性上的解释,确实没有这样列出来有说服力)。
还有一个trick要注意的是,如果给出了低维空间中的坐标,要复原在原空间的坐标时,要对每一个维度加上对应的均值,这是因为在做PCA之前进行了中心化处理。
怎么样? 是不是与书籍上的写法不一样呢?
详细且透彻的分析PCA原理的更多相关文章
- 主元分析PCA理论分析及应用
首先,必须说明的是,这篇文章是完完全全复制百度文库当中的一篇文章.本人之前对PCA比较好奇,在看到这篇文章之后发现其对PCA的描述非常详细,因此迫不及待要跟大家分享一下,希望同样对PCA比较困惑的朋友 ...
- Kernel PCA 原理和演示
Kernel PCA 原理和演示 主成份(Principal Component Analysis)分析是降维(Dimension Reduction)的重要手段.每一个主成分都是数据在某一个方向上的 ...
- 主成分分析(PCA)原理与实现
主成分分析原理与实现 主成分分析是一种矩阵的压缩算法,在减少矩阵维数的同时尽可能的保留原矩阵的信息,简单来说就是将 \(n×m\)的矩阵转换成\(n×k\)的矩阵,仅保留矩阵中所存在的主要特性,从 ...
- PCA原理与实践
在对数据进行预处理时,我们经常会遇到数据的维数非常之大,如果不进行相应的特征处理,那么算法的资源开销会很大,这在很多场景下是我们不能接受的.而对于数据的若干维度之间往往会存在较大的相关性,如果能将数据 ...
- 超详细的Guava RateLimiter限流原理解析
超详细的Guava RateLimiter限流原理解析 mp.weixin.qq.com 点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! 限流是保护高并发系统的三把利器之一,另外两个是 ...
- MyBatis 源码分析 - 缓存原理
1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请求,减轻数据库压力.作为一个重要的组件,MyBatis 自然 ...
- Tomcat源码分析——请求原理分析(下)
前言 本文继续讲解TOMCAT的请求原理分析,建议朋友们阅读本文时首先阅读过<TOMCAT源码分析——请求原理分析(上)>和<TOMCAT源码分析——请求原理分析(中)>.在& ...
- 机器学习之主成分分析PCA原理笔记
1. 相关背景 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律.多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的 ...
- 降维算法----PCA原理推导
1.从几何的角度去理解PCA降维 以平面坐标系为例,点的坐标是怎么来的? 图1 ...
随机推荐
- nodeJS之crypto模块公钥加密及解密
nodeJS之crypto模块公钥加密及解密 NodeJS有以下4个与公钥加密相关的类.1. Cipher: 用于加密数据:2. Decipher: 用于解密数据:3. Sign: 用于生成签名:4. ...
- django_redis作为 session backend 使用配置
Django 默认可以使用任何 cache backend 作为 session backend, 将 django-redis 作为 session 储存后端不用安装任何额外的 backend # ...
- Python import用法
官方文档说明: Python code in one module gains access to the code in another module by the process of impor ...
- day81
昨日回顾: 昨日回顾: auth组件: -验证:authenticat(request,username=') -登录:login(request,user) -注销:logout(request), ...
- C语言学习 例四
#inlude <studio.h> int main(){ int x,y; sanf("%d",&x); if (x<0) y=-1; els ...
- 使用Win PE修改其他硬盘中的系统注册表
使用场景:原来装的机械硬盘系统盘为C盘,后来买了个SSD固态硬盘后,进入WinPE系统后,把原来的C盘整个复制到了固态硬盘,然后用BooticeX64.exe工具在UEFI启动中增加SSD固态硬盘中的 ...
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [二] 基本使用
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 使用环境 Visual Studio 2017 .NET ...
- Js基础---红宝书读书日记(1)-------基本类型和引用类型
JS的变量可能包含两种不同数据类型的值,基本类型和引用类型; 基本类型是指简单的数据段,引用类型是指可能由多个值构成的对象; JS高级程序设计第三章介绍了变量分为 5种简单数据类型(string/nu ...
- C#_Attribute特性
[AttributeUsage(AttributeTargets.All)]//指定Attribute的使用范围,比如只能在class级别使用 public class Column : Attrib ...
- Redis数据"丢失"讨论及规避和解决的几点总结
Redis大部分应用场景是纯缓存服务,请求后端有Primary Storage的组件,如MySQL,HBase;请求Redis的键未命中,会从primary Storage中获取数据返回,同时更新Re ...