Principal Components Analysis

(一)引入PCA

   当我们对某个系统或指标进行研究时往往会发现,影响这些系统和指标的因素或变量的数量非常的多。多变量无疑会为科学研究带来丰富的信息,但也会在一定程度上增加工作的难度,而通常变量之间又具有一定的相关性,这又增加了问题分析的复杂度。如果分别分析每个变量,那么分析又不够综合,而盲目的减少变量又会损失很多有用的信息。因而我们自然而然想到能否用较少的新变量去代替原来较多的旧变量(即降维),同时使这些新变量又能够尽可能保留原来旧变量所反映的信息,另外又能保证这些新变量之间是相互无关的。

而PCA就是在这样的一个背景下用于解决上述问题的一种方法,其思想就是将多维的旧变量转换成低维的新变量,使新变量之间只包含旧变量中最主要的成分。那么什么样的成分才是最重要的呢?我们知道,当一个变量只取一个数值时,这个变量所提供的信息量非常有限,而当这个变量取一系列不同的数值时,我们可以从中读出最大值,最小值,平均值等信息。当变量的变异性越大时,说明它对各种场景的“遍历性”越强,提供的信息就更加充分,信息量就越大。较不严格的说:当一个变量中的某个成分的变异性为0,即其方差为0,那么我们就可以认为该变量提供的信息量为0。相反,方差越大时我们认为其包含的信息量越大。

(二)寻找变换

在n维空间中,任何一个n维向量都可表示成该空间下一组基的线性组合,而其中的系数就是该向量在这组基下的坐标。同时,我们还可以寻找另外一组基来表示该向量,就得到一个新坐标。而从旧基到新基的坐标变换是通过变换矩阵得到的。假设我们有$m$个$n$维的坐标向量所组成的矩阵$\mathbf{X}$,通过变化矩阵$\mathbf{P}$将$\mathbf{X}$变换成新坐标矩阵$\mathbf{Y}$,即$\mathbf{P}\mathbf{X}=\mathbf{Y}$,其中$\mathbf{X},\mathbf{Y}$为$n\times m$,$\mathbf{P}$为$n\times n$。

现在我们的目标就是寻找$\mathbf{P}$,使变量$\mathbf{X}=(x_1,x_2,\cdots,x_m)$变换成新的坐标$\mathbf{Y}=(y_1,y_2,\cdots,y_m)$使$y_i$的方差尽可能的大,$y_i,y_j\ (i\neq j)$之间的协方差为0,即$y_i,y_j$之间相互无关。

首先,我们对数据$\mathbf{X}$作一下中心化处理,即将$x_i$减去其平均值$\bar{x}$,使$x_i$的均值为0。以下我们都假设$x_i$的均值为0。记矩阵$\mathbf{X}$为如下形式:

\begin{equation}\mathbf{X}=\left[\begin{array}&X_{11}&X_{12}&\cdots&X_{1m}\\X_{21}&X_{22}&\cdots&X_{2m}\\\vdots&\vdots&\cdots&\vdots\\X_{n1}&X_{n2}&\cdots&X_{nm}\end{array}\right]\triangleq\left[\begin{array}&X_{1\cdot}\\X_{2\cdot}\\\vdots\\X_{n\cdot}\end{array}\right]\label{equ:denoteX}\end{equation}

从式子\ref{equ:denoteX}中,我们可以计算各分量的方差:

\begin{align}\sigma_1^2&=\frac{1}{m}\sum_{i=1}^mX_{1i}^2=\frac{1}{m}X_{1\cdot}X_{1\cdot}^\prime\\&\vdots\nonumber\\\sigma_n^2&=\frac{1}{m}\sum_{i=1}^mX_{ni}^2=\frac{1}{m}X_{n\cdot} X_{n\cdot}^\prime\end{align}

以及第$i$个分量与第$j$个分量的协方差:

\begin{align}\sigma_{ij}^2=\frac{1}{m}\sum_{k=1}^mX_{ik}X_{jk}=\frac{1}{m}X_{i\cdot}X_{i\cdot}^\prime\end{align}

所以$n$维变量的协方差矩阵可写成如下形式:

\begin{align*}&\left[\begin{array}&\sigma_1^2&\sigma_{12}^2&\cdots&\sigma_{1n}^2\\\sigma_{21}^2&\sigma_2^2&\cdots&\sigma_{2n}^2\\\vdots &\vdots &\cdots&\vdots\\\sigma_{n1}^2&\sigma_{n2}^2&\cdots&\sigma_n^2\end{array}\right]=\frac{1}{m}\left[\begin{array}&X_{1\cdot}X_{1\cdot}^\prime&\cdots&X_{1\cdot}X_{n\cdot}^\prime\\\vdots&\cdots\\X_{n\cdot}X_{1\cdot}^\prime&\cdots&X_{n\cdot}X_{n\cdot}^\prime\end{array}\right]\\=&\frac{1}{m}\mathbf{X}\mathbf{X}^\prime\triangleq\mathbf{C_X}\end{align*}

同理,新变量$\mathbf{Y}$的协方差矩阵记为$\mathbf{C_Y}=\frac{1}{m}\mathbf{Y}\mathbf{Y}^\prime$。

我们的目标是求矩阵$\mathbf{P}:\mathbf{P}\mathbf{X}=\mathbf{Y}$使$\mathbf{C_Y}=\left[\begin{array}&\lambda_1\\\ &\lambda_2 \\ &&\ddots\\&&&\lambda_n\end{array}\right]$为对角矩阵,其中非对角线为新变量之间的协方差(说明新变量之间相互无关),对角线表示新变量的方差$\lambda_1\geq\lambda_2\geq\cdots\geq\lambda_n$,这样新变量的第一个分量方差最大,即信息量最大,以此类推。

\begin{equation}\mathbf{C_Y}=\frac{1}{m}\mathbf{Y}\mathbf{Y}^\prime=\frac{1}{m}\mathbf{P}\mathbf{X}\mathbf{X}^\prime\mathbf{P}^\prime=\mathbf{P}\mathbf{C_X}\mathbf{P}^\prime=\Lambda=\left[\begin{array}&\lambda_1\\&\lambda_2\\&&\ddots\\&&&\lambda_n\end{array}\right]\end{equation}

由于$\mathbf{C_X}$是对称矩阵,所以根据线性代数的知识,我们可以知道,存在一个正定矩阵$\mathbf{Q}$使$\mathbf{Q}\mathbf{C_X}\mathbf{Q}^\prime=\Lambda=\left[\begin{array}&\lambda_1\\&\lambda_2\\&&\ddots\\&&&\lambda_n\end{array}\right]$,其中$\lambda_1\geq\lambda_2\geq\cdots\geq\lambda_n$为$\mathbf{C_X}$的特征值,$\mathbf{Q}=(q_1,q_2,\cdots,q_n)$为对应的特征向量。故我们通过此方法可以得到$\mathbf{P}=\mathbf{Q}=(q_1,q_2,\cdots,q_n)$其中$q_1$为$\mathbf{C_X}$的最大特征值对应的特征向量,$q_1$称为最主要成分,$q_k$称为第$k$主要成分。

回到我们原先的问题,我们要将$n$维的变量降为$k$维的新变量,同时使新变量的各成分方差最大,协方差为0。那么我们可以取$\mathbf{P}$的前$k$个向量$\mathbf{P^{(k)}}=(p_1,p_2,\cdots,p_k)$,然后将$x_i$投影到$p_1,p_2,\cdots,p_k$上得到新坐标$y_i$,即

$$y_i=(p_1x_i^\prime,\cdots,p_kx_i^\prime)=x_i^\prime\mathbf{P^{(k)}}$$

将其写成矩阵形式:

$$\mathbf{Y}_{k\times m}=(y_1,y_2,\cdots,y_m)=(x_1^\prime\mathbf{P^{(k)}},\cdots,x_m^\prime\mathbf{P^{(k)}})=\mathbf{P^{(k)}}^\prime\mathbf{X}$$.

(三)Singular Value Decomposition (SVD)

设$\mathbf{X}$为任意$n\times m$矩阵,$\mathbf{X}^\prime\mathbf{X}$是秩为$r(r\leq m)$的对称矩阵,$\{\hat{v}_1,\hat{v}_2,\cdots,\hat{v}_r\}$是$\mathbf{X}^\prime\mathbf{X}$的$m\times 1$正交特征向量,对应的特征值为$(\lambda_1,\lambda_2,\cdots,\lambda_r)$,于是有:$(\mathbf{X}^\prime\mathbf{X})\hat{v}_i=\lambda_i\hat{v}_i$。令$\sigma_i=\sqrt{\lambda_i},u_i=\frac{1}{\sigma_i}\mathbf{X}\hat{v}_i$,则$\{\hat{u}_1,\hat{u}_2,\cdots,\hat{u}_r\}$是$n\times 1$正交向量,即$\hat{u}_i\cdot\hat{u}_j=\delta_{ij}=\left\{\begin{array}&1&i=j\\0&i\neq j\end{array}\right.$,$\|\mathbf{X}\hat{v}_i\|=\sigma_i$。

我们构造一个新的对角矩阵$\mathbf{\Sigma}=\left[\begin{array}&\sigma_1\\&\sigma_2\\&&\ddots\\&&&\sigma_r\end{array}\right]$,令$\mathbf{V}=(\hat{v}_1,\cdots,\hat{v}_r),\mathbf{U}=(\hat{u}_1,\cdots,\hat{u}_r)$。

由$\hat{u}_i=\frac{1}{\sigma_i}\mathbf{X}\hat{v}_i\Longrightarrow \sigma_i\hat{u}_i=\mathbf{X}\hat{v}_i\Longrightarrow \mathbf{U}\mathbf{\Sigma}=\mathbf{X}\mathbf{V}\Longrightarrow \mathbf{U}\mathbf{\Sigma}\mathbf{V}^\prime=\mathbf{X}\mathbf{V}\mathbf{V}^\prime=\mathbf{X}$,即任意一个$n\times m$矩阵都可以分解成一个列正交矩阵$\mathbf{U}$,对角矩阵$\mathbf{\Sigma}$和行正交矩阵的乘积。其中$\mathbf{V}$是$\mathbf{X}\mathbf{X}^\prime$的正交矩阵,称为右奇异特征向量,$\mathbf{U}$称为左奇异特征向量。

(四)PCA与SVD

我们可以利用SVD计算PCA的主成分。假设我们有$n$维变量组成的数据$\mathbf{X}_{n\times m}=(x_1,x_2,\cdots,x_m)$,令$\mathbf{Y}=\frac{1}{\sqrt{m}}\mathbf{X}^\prime$,则

$$\mathbf{Y}^\prime\mathbf{Y}=(\frac{1}{\sqrt{m}}\mathbf{X}^\prime)^\prime(\frac{1}{\sqrt{m}}\mathbf{X}^\prime)=\frac{1}{m}\mathbf{X}\mathbf{X}^\prime=\mathbf{C_X}$$

即变量的协方差矩阵。而PCA中的主成分就是好协方差矩阵中的前$k$个最大特征值对应的特征向量。对$\mathbf{Y}$进行SVD,则$\mathbf{Y}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^\prime$,其中$\mathbf{V}$是$\mathbf{Y}^\prime\mathbf{Y}$的前$k$个最大特征值对应的特征向量,故$\mathbf{V}$是$\mathbf{X}$的主成分。

(五)总结

PCA过程:

  1. 将已知数据组织成一个$n\times m$矩阵$\mathbf{X}$,其中$n$为变量维数,$m$为数据个数。
  2. 将$\mathbf{X}$的每一行都减去该行的平均值,使变量的均值为0。
  3. 构造$\mathbf{Y}=\frac{1}{\sqrt{m}}\mathbf{X}^\prime$,对$\mathbf{Y}$进行SVD的主成分$\mathbf{V}$。
  4. 将旧变量投影到$\mathbf{V}$中得到新变量。

Jordan Lecture Note-9: Principal Components Analysis (PCA).的更多相关文章

  1. Jordan Lecture Note-10: Kernel Principal Components Analysis (KPCA).

    Kernel Principal Components Analysis PCA实际上就是对原坐标进行正交变换,使得变换后的坐标之间相互无关,并且尽可能保留多的信息.但PCA所做的是线性变换,对于某些 ...

  2. [zz] Principal Components Analysis (PCA) 主成分分析

    我理解PCA应该分为2个过程:1.求出降维矩阵:2.利用得到的降维矩阵,对数据/特征做降维. 这里分成了两篇博客,来做总结. http://matlabdatamining.blogspot.com/ ...

  3. Andrew Ng机器学习公开课笔记–Principal Components Analysis (PCA)

    网易公开课,第14, 15课 notes,10 之前谈到的factor analysis,用EM算法找到潜在的因子变量,以达到降维的目的 这里介绍的是另外一种降维的方法,Principal Compo ...

  4. 主成分分析 | Principal Components Analysis | PCA

    理论 仅仅使用基本的线性代数知识,就可以推导出一种简单的机器学习算法,主成分分析(Principal Components Analysis, PCA). 假设有 $m$ 个点的集合:$\left\{ ...

  5. 主成分分析(principal components analysis, PCA)

    原理 计算方法 主要性质 有关统计量 主成分个数的选取 ------------------------------------------------------------------------ ...

  6. 主成分分析(principal components analysis, PCA)——无监督学习

    降维的两种方式: (1)特征选择(feature selection),通过变量选择来缩减维数. (2)特征提取(feature extraction),通过线性或非线性变换(投影)来生成缩减集(复合 ...

  7. Principal components analysis(PCA):主元分析

    在因子分析(Factor analysis)中,介绍了一种降维概率模型,用EM算法(EM算法原理详解)估计参数.在这里讨论另外一种降维方法:主元分析法(PCA),这种算法更加直接,只需要进行特征向量的 ...

  8. 机器学习:Principal components analysis (主分量分析)

    Principal components analysis 这一讲,我们简单介绍Principal Components Analysis(PCA),这个方法可以用来确定特征空间的子空间,用一种更加紧 ...

  9. A tutorial on Principal Components Analysis | 主成分分析(PCA)教程

    A tutorial on Principal Components Analysis 原著:Lindsay I Smith, A tutorial on Principal Components A ...

随机推荐

  1. 告别where 1=1 最佳方案分享

    已经有2年没有用过where 1=1了,没想到换了家公司后,又让我看到了它.在网络上面搜索了一下,发现没有人提供一个比较好的方案来解决这一问题.很多人说可以让数据库的优化机制去处理,但是,我想对于大部 ...

  2. 测试xss和xsf

    xss注入攻击: 123123123 被动注入: 1231231231231231 主动注入: 对不起,你需要登录才能评论 用户名 密码

  3. convert source code files to pdf format in python

    import os import sys def find_file(root_dir, type): dirs_pool = [root_dir] dest_pool = [] def scan_d ...

  4. 转-CMMI在中国之混乱-CMMI比ISO9000会更惨

    CMMI在中国之混乱-CMMI比ISO9000会更惨 自己接触CMM/CMMI已经有8年时间了,现在静心回顾一下,觉得CMMI在中国的命运会比ISO9000还悲惨. 一组现象或许让你我对此结论有更深入 ...

  5. 解决A program file was not specified in the launch configuration.问题

        问题描述: 在eclipse 中开发c++或c是比较麻烦的事情,刚刚配置好mingw32和cdt和环境变量后,新建一个hello world的c++项目还是会出现问题.主要是在编译的时候会提示 ...

  6. openstack分布式安装

    一. keystone安装笔记 初次接触openstack,在尝试过单机部署以后不是很满意,就开始着手分布式部署,主要是按照openstack官网上的安装教程来的,本人安装的是目前最新的 I 版. 以 ...

  7. NodeJS:树的反序列化

    !!不知问啥,cnblog的MarkDown编辑器不好使了. 本文也在我的博客edwardesire.com上,欢迎品尝. 树的反序列化就是将序列数组安装线索组成树结构,今次项目数据库存储决策节点的方 ...

  8. 第二百八十六天 how can I 坚持

    bug不断啊,头疼. 今天早上到的倒是挺早. 中午吃的黄焖鸡,晚上加了会班. 勇江的鱼都死了,杨建的还剩3条,晚上到家都快十点了,还洗了衣服,没捞出来呢, 希望可以请下来假吧. 晾上衣服睡觉.

  9. Maven学习总结(一)——Maven入门

    原博文出自于:http://www.cnblogs.com/xdp-gacl/p/3498271.html 感谢! 一.Maven的基本概念 Maven(翻译为"专家"," ...

  10. 搭建nodejs环境推荐用两个工具:nvm和npm

    nvm 是 nodejs version manager 的简称,即:nodejs版本管理npm 是 nodejs package manager 的简称,即:nodejs模块管理 有了这两个工具,管 ...