前两天面试问到了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原理的更多相关文章

  1. 主元分析PCA理论分析及应用

    首先,必须说明的是,这篇文章是完完全全复制百度文库当中的一篇文章.本人之前对PCA比较好奇,在看到这篇文章之后发现其对PCA的描述非常详细,因此迫不及待要跟大家分享一下,希望同样对PCA比较困惑的朋友 ...

  2. Kernel PCA 原理和演示

    Kernel PCA 原理和演示 主成份(Principal Component Analysis)分析是降维(Dimension Reduction)的重要手段.每一个主成分都是数据在某一个方向上的 ...

  3. 主成分分析(PCA)原理与实现

    主成分分析原理与实现   主成分分析是一种矩阵的压缩算法,在减少矩阵维数的同时尽可能的保留原矩阵的信息,简单来说就是将 \(n×m\)的矩阵转换成\(n×k\)的矩阵,仅保留矩阵中所存在的主要特性,从 ...

  4. PCA原理与实践

    在对数据进行预处理时,我们经常会遇到数据的维数非常之大,如果不进行相应的特征处理,那么算法的资源开销会很大,这在很多场景下是我们不能接受的.而对于数据的若干维度之间往往会存在较大的相关性,如果能将数据 ...

  5. 超详细的Guava RateLimiter限流原理解析

    超详细的Guava RateLimiter限流原理解析  mp.weixin.qq.com 点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! 限流是保护高并发系统的三把利器之一,另外两个是 ...

  6. MyBatis 源码分析 - 缓存原理

    1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请求,减轻数据库压力.作为一个重要的组件,MyBatis 自然 ...

  7. Tomcat源码分析——请求原理分析(下)

    前言 本文继续讲解TOMCAT的请求原理分析,建议朋友们阅读本文时首先阅读过<TOMCAT源码分析——请求原理分析(上)>和<TOMCAT源码分析——请求原理分析(中)>.在& ...

  8. 机器学习之主成分分析PCA原理笔记

    1.    相关背景 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律.多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的 ...

  9. 降维算法----PCA原理推导

    1.从几何的角度去理解PCA降维 以平面坐标系为例,点的坐标是怎么来的? 图1                                                             ...

随机推荐

  1. PAT A1075 PAT Judge (25 分)——结构体初始化,排序

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  2. PAT A1133 Splitting A Linked List (25 分)——链表

    Given a singly linked list, you are supposed to rearrange its elements so that all the negative valu ...

  3. Linux 防火墙 开放 端口 iptables

    查看状态:iptables -L -n 方法1.使用iptables开放如下端口/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT保存/etc/ ...

  4. Python内存优化:Profile,slots,compact dict

    实际项目中,pythoner更加关注的是Python的性能问题,之前也写过一篇文章<Python性能优化>介绍Python性能优化的一些方法.而本文,关注的是Python的内存优化,一般说 ...

  5. 通过chrome浏览器分析网页加载时间

    今天趁着下班的时间看了下chrome浏览器的网页加载时间分析工具和相关文档,简单写点儿东西记录一下. 以百度首页加载为例,分析下一张图片1.jgp(就是背景图)的加载时间 看右侧的Timing标签,从 ...

  6. angularjs springMVC 交互

    AngularJS中的$resource使用与Restful资源交互 1.AngularJS中的 $resource 这个服务可以创建一个资源对象,我们可以用它非常方便地同支持RESTful的服务端数 ...

  7. 【noi.ac】#309. Mas的童年

    #309. Mas的童年 链接 分析: 求$max \{sj + (s_i \oplus s_j)\}$ 因为$a + b = a \oplus b + (a \& b) \times 2$ ...

  8. c#通用配置文件读写类与格式转换(xml,ini,json)

    .NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...

  9. C# 读取Json配置文件

    今天需要用到读取Json配置文件的helper   结果竟然没找到合适的    微软自己有一个 不过不支持.Net fw 4.0 于是自己在NewTonSoft.Json的基础上  加了点小小的封装  ...

  10. [UWP 自定义控件]了解模板化控件(2):模仿ContentControl

    ContentControl是最简单的TemplatedControl,而且它在UWP出场频率很高.ContentControl和Panel是VisualTree的基础,可以说几乎所有VisualTr ...