前两天面试问到了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. 快速排序的php实现

    再来一个非常高级的排序算法,快速排序...这个算法是很高效的. 快速排序的思路是,找到一个分割点(中枢点 默认是列表第一个值),把原列表分隔成两部分,在分割点左侧的是都比它小的,在它右侧的是都比它大的 ...

  2. linux中yum与rpm区别

    一.源代码形式 1.      绝大多数开源软件都是直接以原码形式发布的 2.      源代码一般会被打成.tar.gz的归档压缩文件 3.      源代码需要编译成为二进制形式之后才能够运行使用 ...

  3. 创建一个宽高成比例的弹性div盒子

    这里先提供一种,有更好的方法再补充. demo代码如下: <!DOCTYPE html> <html lang="en"> <head> < ...

  4. Angularjs 地址联动2.1.1

    这个地址联动是基于 Angularjs 的 效果图如下: 看着是不是可美观了?哈哈!源码如下: <!DOCTYPE HTML> <html lang="zh-CN" ...

  5. Part 6:静态文件--Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 前面我们编写了一个经过测试的投票应用,现在让 ...

  6. Mac 启动 ssh 服务

    Mac 本身有 ssh,只是没有默认开启,需要手动开启. 启动 sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 关闭 su ...

  7. 通过清华TUNA镜像源下载Android源码

    建议参考官方教程:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 以下为自己测试时执行的步骤: 1.下载repo $ curl https://mirr ...

  8. 2019年以后ArcGIS 调用天地图的资源URL

    2019年1月1日起,天地图做出如下变更,导致直接在Arcgis/ArcMap中添加WMTS服务不能用了. 国家天地图解释的很清楚,注册个人用户就可以了. 原有调用方式不变,只要在URL 后添加“&a ...

  9. Openstack架构概念图-简单汇总

    OpenStack是一个云平台管理的项目,它不是一个软件.这个项目由几个主要的组件组合起来完成一些具体的工作.想要了解openstack,第一步我们可以观察他的概念图: 针对上图的翻译+解释: 上图主 ...

  10. Linux下Redis主从复制以及SSDB主主复制环境部署记录

    前面的文章已经介绍了redis作为缓存数据库的说明,本文主要说下redis主从复制及集群管理配置的操作记录: Redis主从复制(目前redis仅支持主从复制模式,可以支持在线备份.读写分离等功能.) ...