Jordan Lecture Note-9: Principal Components Analysis (PCA).

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}$中得到新变量。
posted on 2014-02-23 18:23 Boostable 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/boostable/p/principal_components_analysis.html

Jordan Lecture Note-9: Principal Components Analysis (PCA).相关推荐

  1. OpenCV3.3中主成分分析(Principal Components Analysis, PCA)接口简介及使用

    OpenCV3.3中给出了主成分分析(Principal Components Analysis, PCA)的实现,即cv::PCA类,类的声明在include/opencv2/core.hpp文件中 ...

  2. PCA(Principal Components Analysis)

    文章目录 一.定义符号 二.中心化和标准化 三.Z-score 标准化 四.PCA 算法的基本思想 五.求解 μ 与降维 六.参考 资料领取 | 干货分享 | 欢迎来访 >>>> ...

  3. 学习,使用主成分分析 (Principal components analysis,PCA)处理数据必看文章

    强烈推荐如下高质量博文: https://blog.csdn.net/watkinsong/article/details/8234766#commentsedit 我的pca迷惑 迷惑一 刚开始接触 ...

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

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

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

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

  6. 感受PCA之美(Principal components analysis overview and application)

    写在前面:        前两周刚好翻到自己的毕业论文,看到之前做过的关于PCA点云法向量估计的推导.发现有些概念已经有些模糊不清了,正好遇到要进行组内分享,于是又重新查找资料对PCA再做了一次探索. ...

  7. PCA(主成分分析-principal components analysis)学习笔记以及源代码实战讲解

    PCA(主成分分析-principal components analysis)学习笔记以及源代码实战讲解 文章目录 PCA(主成分分析-principal components analysis)学 ...

  8. 主成分分析(Principal components analysis)-最大方差解释(转)

    在这一篇之前的内容是<Factor Analysis>,由于非常理论,打算学完整个课程后再写.在写这篇之前,我阅读了PCA.SVD和LDA.这几个模型相近,却都有自己的特点.本篇打算先介绍 ...

  9. pca降维python实例_主成分分析(Principal component analysis, PCA)例子–Python | 文艺数学君...

    摘要这一篇是关于PCA的实战, 我们会举一个例子, 看一下PCA具体在实战中是如何来进行的. 同时我们会比较同一个数据下, 使用PCA(主成分分析)和FA(因子分析)得到结果的不同. 简介 这一篇文章 ...

最新文章

  1. 那些值得回味的MySQL的基础知识
  2. 猎头出500万年薪挖百度某高T,却被对方拒绝!网友:钱不是最重要的!
  3. mysql timestamp 转型_MySQL的timestamp类型自动更新问题【转】
  4. 在eclipse中导入工程后@Override报错
  5. 电脑无法安装python-无法安装Python库
  6. Linux Shell下”/dev/null 21“相关知识说明
  7. 田玉靖(1987-),女,北京卡达克数据技术中心软件业务本部中级工程师,主要研究方向为软件架构、编程模式。...
  8. 数字化改革看“浙”里 CDEC2021中国数字智能生态大会杭州站举行
  9. 404 单页应用 报错 路由_单页应用
  10. 【身份牌识别】基于matlab GUI模板匹配身份牌识别【含Matlab源码 1354期】
  11. java8的下载与安装(网上教程的安装方法)
  12. Codesys学习调试笔记1
  13. 【BUG】【已解决】VS2019:应用程序无法正常启动(0x000007b)
  14. 鬼使神差的给宝宝办了大米的卡
  15. 01 MQTT小例子-连接
  16. 华为RH2288 V3安装 linux 龙蜥anolis系统安装
  17. Python3 基础语法知识1
  18. linux nand 驱动,Linux NAND FLASH驱动分析(一)
  19. 数字图像处理--冈萨雷斯第4版--第一章 绪论
  20. 非诚勿扰24灯全灭php,收二手货小伙上非诚勿扰,24盏灯全灭还遭羞辱,最后才知道是收二手豪车身价上亿...

热门文章

  1. python中的随机函数的用法_python中的随机函数小结
  2. vue-json-excel前端导出excel教程
  3. HttpClient 使用证书访问https站点
  4. Teamcenter 入门开发系列问答(1)
  5. 网卡故障会出现的错误代码_变频器出现这种故障很多老电工都会误判!
  6. 表情可字怎么打_小辫子表情怎么打?两根毛表情符号复制
  7. attrib批量显示文件夹_Windows 下彻底隐藏文件和文件夹的方法
  8. Elastic-Job项目启动后,控制台一直报Cron表达式有误且Cron表达式与当前配置的表达式不一样
  9. nginx ---- Nginx服务器基础配置实例
  10. 设置版权声明html,在Hexo中自动为Yilia主题增加版权声明