动机

在机器学习领域中,我们常常会遇到维数很高的数据,有些数据的特征维度高达上百万维,很显然这样的数据是无法直接计算的,而且维度这么高,其中包含的信息一定有冗余,这时就需要进行降维,总的来说,我们降维的主要目的有如下几条:

  1. 在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少冗余信息所造成的误差,提高识别(或其他应用)的精度。
  2. 希望通过降维算法来寻找数据内部的本质结构特征。
  3. 通过降维来加速后续计算的速度
  4. 还有其他很多目的,如解决数据的sparse问题

而比较常用的一种降维方法就是PCA(主成分分析).

PCA思路

降维的过程其实可以看成是一种映射的过程,把在高维空间中的点投影到低维空间中,在这个投影的过程中,我们应当尽量使得信息最大程度的保留。那么,我们应该如何来度量包含信息的多少呢?一种比较常见的方法就是用方差(Variance)来衡量。这在直观上很容易理解,对于数据的一个维度来说,如果这个维度上的数据具有很大的方差,说明这个维度对于数据来说有很大的差异性,其中包含了更多的信息。

另外,如果两个维度之间是无关的,那么这两个维度所包含的信息是没有”重叠”部分的,这种情况包含的信息是最多的;反过来说,如果两个维度是高度相关的,从一个维度就能推出另外一个维度,那么很显然,这两个相关的维度其实最多只包含了一个维度的信息,这就造成了冗余。那么,我们又应该用什么来衡量两个维度之间的相似程度呢?在数学上,我们可以使用协方差(Covariance)来衡量两个随机变亮之间的相似程度,因此我们可以利用协方差来衡量维度之间的相似程度。协方差为0时,说明两个随机变量是完全无关的。

因此,PCA的基本思想是这样的:

将高维空间中的点投影(线性映射)到某个低维空间中间,使得投影之后的点:

  1. 每一个维度内部的方差尽量大.
  2. 维度之间的协方差为0,也即每一个维度两两正交。

假设我们现在有$m\times n$的数据$X$,其中$m$表示数据的大小,$n$表示维度的大小。

对于维度$j$来说,它的方差为:

上式中的$\mu_j$其实是维度$j$的均值.

对于维度$p$,$q$来说,他们之间的协方差为:

上式中的$\mu_p,\mu_q$其实是维度$q,q$的均值.

如果光看上述的式子,也许会觉得计算$X$的 每一个维度的方差和协方差是非常麻烦的,其实不然,我们可以利用矩阵运算来简化我们的计算过程。

首先,我们注意到不管在计算方差还是协方差的时候,我们都需要计算$\mu_j$,因此,我们可以先对$X$进行如下的处理:

计算每一个维度的均值$\mu_j$,然后将每个维度上的值减去这个均值,这样就使得每个维度上的均值都变成了0.也即令$X_{ij}=X_{ij} - \mu_j$.

经过这样处理之后,原来的方差和协方差就可以表示为:

这看起来还是比较繁琐,但是,事实上,根据矩阵乘法运算的规则,我们可以得到如下的等式:

可以看到,其实$\frac{1}{m}X^T X$是一个对称矩阵,其对角线上的元素就是我们的方差,而其他元素就是对应维度之间的协方差!

这看来,计算方差和协方差是非常容易的!

令$C=\frac{1}{m}X^{T}X$,则$C$就称为$X$的协方差矩阵。

我们需要进一步具体化我们的优化目标,令$Y$表示经过映射之后的数据,则$Y=XP$,假设$D$是$Y$的协方差矩阵,那么我们有如下的推导:

也就是说,我们的目标可以变得非常具体了:想要找到这样一个矩阵$P$,使得$P^T C P$是一个对角矩阵,其对角线元素从大到小一次排列,并且除了对角线以外的其他元素均为0.

从大到小排列是因为方便选取方差较大的维度,对角线以外的元素为0表示新数据的各个维度之间是相互无关的。

现在,我们的问题就是如何使得协方差矩阵$C$对角化,这在数学上其实早就已经有了成熟的方法,在矩阵论中,有这样的结论:一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量.

设$n\times n$的实对称矩阵有特征向量$e_1,e_2,\cdots,e_n$,将其组成矩阵$E=(e_1,e_2,\cdots,e_n)$

则对于$C$来说,有如下的结论:

其中$\Lambda$是一个对角矩阵,其对角元素是个特征向量对应的特征值。

到了这里,我们就可以发现,我们想要寻找的$P$其实就是$E$

算法过程

根据上面的分析,我们就能够得出计算PCA时的几个步骤:

假设原始数据是$X_{m\times n}$,其中$m$表示数据大小,$n$表示维度大小。

  1. 将$X$中的数据进行零均值化,即每一列都减去其均值。
  2. 计算协方差矩阵$C=\frac{1}{m}X^T X$
  3. 求出$C$的特征值和特征向量
  4. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
  5. $Y=XP$就是降维到k维后的数据。

参考资料

http://zhouyichu.com/machine-learning/PCA-Tutorial.html

PCA原理分析的更多相关文章

  1. 最大比率传输(Maximum Ratio Transmission, MRT)原理分析

    转载请注明出处. 最大比率发射(Maximum Ratio Transmission, MRT)是文献中经常看见的一个词,今天就在这里做一下笔记. 参考文献为:T. K. Y. Lo, "M ...

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

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

  3. Kernel PCA 原理和演示

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

  4. 主成分分析法PCA原理

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

  5. PCA原理(转)

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

  6. PCA 原理

      PCA的数学原理(转) 1 年前 PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取 ...

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

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

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

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

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

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

随机推荐

  1. js 中 的 if使用条件

    在javascript中,哪些值能作为if的条件呢 1.布尔变量true/false2.数字非0,非NaN/ (0 或NaN) 见下面的例子,莫以为负数就以为if语句为假了. 复制代码代码如下: va ...

  2. shell判断文件后缀名是否为特定字符串

    如果文件是 .css文件 或 .js文件,则进行处理. if [ "${file##*.}"x = "css"x ]||[ "${file##*.}& ...

  3. CODE[VS]2494 Vani和Cl2捉迷藏

    原题链接 这里有一个结论:最多能选取的藏身点个数等于最小路径可重复点覆盖的路径总数. 所以我们可以先传递闭包,然后求最小路径点覆盖即可. #include<cstdio> #include ...

  4. Tag file

    JSP 2.0 引入 Tag file ,tag file 以 tag 或 tagx 为后缀,它们可以包含其他资源文件:一个被其他文件包含的 tag file 应该以 tagf 为后缀. 如同JSP页 ...

  5. Tomcat的下载、安装、启动与关闭

    ubuntu server 16.04 从官网下载 Binary Distributions 版本的相应的压缩包, https://tomcat.apache.org/download-90.cgi ...

  6. 软件测试基础Ⅲ(osi7层协议,测试模型,LoadRunner组件,软件质量模型)

    osi7层开放式系统互连网络模型 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的 ...

  7. dedecms首页搜索 添加仿百度下拉框

    1:找到uploads/templets/default/head.htm 2: 找到 <input name="q" type="text"  clas ...

  8. kbmmw 中的进程管理小工具

    kbmmw 5.6.20 发布了,本版本带来一个小功能,就是可以在kbmmw 应用里面建立和管理进程, 虽然你可以直接调用windows api 做类似的事情,但是kbmmw 里面简化了操作,也加强了 ...

  9. js监听微信、支付宝返回,后退、上一页按钮事件

    $(function(){ pushHistory(); window.addEventListener("popstate", function(e) { alert(" ...

  10. Java 学习之集合类(Collections)

    Collection(集合类) 我们是使用数组来保存数据,但是他的长度一旦创建,就已经确定了,当我们要动态传入穿值,数组就有些局限了,集合类就孕育而生:所谓集合,就是来保存,盛装数据,也可称为容器类: ...