PCA(主成分分析)

PCA是一种无监督降维方式,它将数据投影到一组互相正交的loading vectors(principal axes)之上,并保证投影后的点在新的坐标轴上的方差最大

  1. 记数据集\(X=\begin{bmatrix}\begin{smallmatrix}\vec{x_1}\\\vec{x_2}\\\vdots\\\vec{x_n}\end{smallmatrix}\end{bmatrix}\)为n行p列的矩阵(n个数据,每个数据p维),特征均值为\(\vec{\mu}=(\mu_1, \mu_2, .., \mu_p)\),数据与均值的差异可表示为\(\tilde{X}=\begin{bmatrix}\begin{smallmatrix}\vec{x_1}-\vec{\mu}\\\vec{x_2}-\vec{\mu}\\\vdots\\\vec{x_n}-\vec{\mu}\end{smallmatrix}\end{bmatrix}\)
  2. 假设需求解m个loading vector \(\vec{\phi}_1,\vec{\phi}_2,...,\vec{\phi}_m\),\({m}\leq{min(n-1,p)}\),且需满足\(\vec{\phi}_i^T\vec{\phi}_i=1\)以及\(\vec{\phi}_i^T\vec{\phi}_j=0, i\neq{j}\)
  3. \(X\)在\(\vec{\phi}_1\)上的投影为\(X\vec{\phi}_1\),特征均值的投影为\(\vec{\mu}\cdot\vec{\phi}_1\),则投影后数据与均值的差异可表示为\(\tilde{X}\vec{\phi}_1\),投影后的方差为\(\vec{\phi}_1^T\tilde{X}^T\tilde{X}\vec{\phi}_1\)(省略了系数\(\frac{1}{n}\))

  4. 记\(Q=\tilde{X}^T\tilde{X}\),\(Q\)即为数据集X的协方差矩阵。将\(Q\)进行特征值分解\(Q=V\Lambda{V^T}\),其中\(\Lambda\)为对角矩阵,对角线上的元素为特征值(不失一般性,这里令其按从大到小的顺序排列);\(V=\begin{bmatrix}\begin{smallmatrix}\vec{v_1}&\vec{v_2}&\cdots&\vec{v_p}\end{smallmatrix}\end{bmatrix}\)为正交矩阵,它的列为对应的特征向量

  5. 投影后的方差可以写成\(\vec{\phi}_1^TV\Lambda{V^T}\vec{\phi}_1=\vec{a}_1^T\Lambda\vec{a}_1=\sum_{i=1}^p\lambda_ia_{1i}^2\),因为\(\sum_{i=1}^pa_{1i}^2=\vec{a}_1^T\vec{a}_1=\vec{\phi}_1^TVV^T\vec{\phi}_1=\vec{\phi}_1^T\vec{\phi}_1=1\),所以方差的最大值为\(\lambda_1\),并且仅当\(\vec{\phi}_1=\vec{v}_1\)时取到

  6. \(X\)在\(\vec{\phi}_2\)上投影后的方差可以表示为\(\sum_{i=1}^p\lambda_ia_{2i}^2\)(同上步类似,\(\vec{a}_2=V^T\vec{\phi}_2\) ,\(\sum_{i=1}^pa_{2i}^2=1\)),又因为\(a_{21}=\vec{v}_1^T\vec{\phi}_2=\vec{\phi}_1^T\vec{\phi}_2=0\),所以方差的最大值为\(\lambda_2\),并且仅当\(\vec{\phi}_2=\vec{v}_2\)时取到

  7. 对于\(\vec{\phi}_i, i=3,...,m\)可以按上述步骤依次求得,方差的最大值为\(\lambda_i\),并且仅当\(\vec{\phi}_i=\vec{v}_i\)时取到

  8. 实际应用中首先将数据集\(X\)进行标准化(减去特征均值并除以特征标准差),此时协方差矩阵\(Q=X^TX\),对\(X\)进行SVD分解,\(X=USV\),其中\(U\)为n行n列的正交矩阵,列向量为\(XX^T\)的特征向量;\(V\)为p行p列的正交矩阵,列向量为\(X^TX\)的特征向量(即同将\(Q\)进行特征值分解得到的\(V\));\(S\)为n行p列的矩阵且非对角线上的元素为0,对角线上的元素\(s_{ii}=\sqrt{\lambda_i}\)

LDA(线性判别分析)

LDA是一种有监督降维方式,假设数据集\(X\)共分为\(K\)个类,需保证投影后的点在新的坐标轴上类内离散度尽可能小,同时类间离散度尽可能大

  1. 记\(\vec{\mu}_k\)为第k个类的特征均值,\(\vec{\mu}\)为总体的特征均值,则特征均值的估计值\(\hat{\vec{\mu}}_k=\frac{\sum_{i\in{class}\ {k}}\vec{x}_i}{n_k}\),\(\hat{\vec{\mu}}=\frac{\sum_{i=1}^n\vec{x}_i}{n}\)
  2. 记\(C_k\)为第k个类的协方差矩阵,\(C\)为总体的协方差矩阵,LDA假设\(C_1=C_2=\cdots=C_K=C\),则协方差矩阵的估计值\(\hat{C}=\sum_{k=1}^K\sum_{i\in{class}\ {k}}(\vec{x}_i-\hat{\vec{\mu}}_k)^T(\vec{x}_i-\hat{\vec{\mu}}_k)\)(省略了系数\(\frac{1}{n-K}\))
  3. 假设投影向量为\(\vec{\phi}\),第k类中数据与均值的差异可表示为\(\tilde{X}_k=\begin{bmatrix}\begin{smallmatrix}\vec{x}_{k_1}-\hat{\vec{\mu}}_k\\\vec{x}_{k_2}-\hat{\vec{\mu}}_k\\\vdots\\\vec{x}_{k_{n_k}}-\hat{\vec{\mu}}_k\end{smallmatrix}\end{bmatrix}\),第k类的数据投影后的离散度可表示为\(\vec{\phi}^T\tilde{X}_k^T\tilde{X}_k\vec{\phi}\),\(K\)个类的类内离散度之和为\(\vec{\phi}^T\sum_{k=1}^K\tilde{X}_k^T\tilde{X}_k\vec{\phi}=\vec{\phi}^T\hat{C}\vec{\phi}\)
  4. 由PCA的第三步可以看出投影后数据的总体离散度为\(\vec{\phi}^T\tilde{X}^T\tilde{X}\vec{\phi}\),其中\(\tilde{X}=\begin{bmatrix}\begin{smallmatrix}\vec{x_1}-\hat{\vec{\mu}}\\\vec{x_2}-\hat{\vec{\mu}}\\\vdots\\\vec{x_n}-\hat{\vec{\mu}}\end{smallmatrix}\end{bmatrix}\),则类间离散度可以表示为总体与类内离散度之差,即\(\vec{\phi}^T[\tilde{X}^T\tilde{X}-\hat{C}]\vec{\phi}=\vec{\phi}^T[\sum_{k=1}^Kn_k(\hat{\vec{\mu}}-\hat{\vec{\mu}}_k)^T(\hat{\vec{\mu}}-\hat{\vec{\mu}}_k)]\vec{\phi}=\vec{\phi}^TB\vec{\phi}\)
  5. 为了使类内离散度尽可能小,同时类间离散度尽可能大,先将类内离散度转化为常数,然后只考虑类间离散度。因此首先进行一个空间变换,使得新空间上的协方差矩阵变为单位矩阵,对\(\hat{C}\)进行特征值分解\(\hat{C}=UDU^T\),记\(W=UD^{-1/2}\)为空间变换矩阵,新空间上的数据集变为\(X^*=XW\)。假设在新空间上的投影坐标轴为\(\vec{\phi}^*\),容易看出在新空间上的类内离散度为\(\vec{\phi}^{*T}W^T\hat{C}W\vec{\phi}^*=\vec{\phi}^{*T}W^T\hat{C}W\vec{\phi}^*=\vec{\phi}^{*T}I\vec{\phi}^*=1\)
  6. 新空间上的类间离散度变为\(\vec{\phi}^{*T}W^TBW\vec{\phi}^*\),此时可以参照PCA的做法,在新空间上依次寻找互相正交的坐标轴,使得新空间上的类间离散度最大。对\(W^TBW\)进行特征值分解\(W^TBW=V\Lambda{V^T}\),容易看出\(\vec{\phi}^{*}_i=\vec{v}_i\),\(i=1,2,\cdots,m\),\(m\leq{K-1}\)(证明过程见PCA的5-7步)
  7. 综上所述,最终求得的投影向量\(\vec{\phi}_i=W\vec{\phi}^{*}_i\),\(i=1,2,\cdots,m\)(即对于一个行向量数据\(\vec{x}\),投影后的值为\(\vec{x}\cdot\vec{\phi}_i\):先通过\(\vec{x}W\)进行空间变换,再投影到新的坐标空间下的向量\(\vec{\phi}^{*}_i\)上)
  8. 对于\(\vec{\phi}^{*}_i\),有\(W^TBW\vec{\phi}^{*}_i=\lambda_i\vec{\phi}^{*}_i\),等式两边同时左乘W,有\(WW^TBW\vec{\phi}^{*}_i=\lambda_iW\vec{\phi}^{*}_i\),即\(UD^{-1}U^TB\vec{\phi}_i=\hat{C}^{-1}B\vec{\phi}_i=\lambda_i\vec{\phi}_i\)。因此上述步骤等价于直接求解\(\hat{C}^{-1}B\)的特征值和特征向量(注意此时的特征向量 \(\vec{\phi}\)不是单位向量\(\vec{\phi}^T\vec{\phi}=1\),而是需满足\([W^{-1}\vec{\phi}]^TW^{-1}\vec{\phi}=\vec{\phi}^T\hat{C}\vec{\phi}=1\)),将此时对应的特征值按从大到小排列取前m个特征值和特征向量
  9. 参考文献: The Elements of Statistical Learning(2nd Edition)

PCA与LDA介绍的更多相关文章

  1. 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps

    四大机器学习降维算法:PCA.LDA.LLE.Laplacian Eigenmaps 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映 ...

  2. PCA和LDA

    一.PCA     在讲PCA之前,首先有人要问了,为什么我们要使用PCA,PCA到底是干什么的?这里先做一个小小的解释,举个例子:在人脸识别工作中一张人脸图像是60*60=3600维,要处理这样的数 ...

  3. 【转】四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps

    最近在找降维的解决方案中,发现了下面的思路,后面可以按照这思路进行尝试下: 链接:http://www.36dsj.com/archives/26723 引言 机器学习领域中所谓的降维就是指采用某种映 ...

  4. PCA与LDA的区别与联系

    由于涉及内容较多,这里转载别人的博客: http://blog.csdn.net/sunmenggmail/article/details/8071502 其实主要在于:PCA与LDA的变换矩阵不同, ...

  5. 特征选取方法PCA与LDA

    一.主成分分析(PCA)介绍 什么是主成分分析?   主成分分析是一种用于连续属性降维的方法,把多指标转化为少数几个综合指标. 它构造了原始属性的一个正交变换,将一组可能相关的变量转化为一组不相关的变 ...

  6. PCA和LDA降维的比较

    PCA 主成分分析方法,LDA 线性判别分析方法,可以认为是有监督的数据降维.下面的代码分别实现了两种降维方式: print(__doc__) import matplotlib.pyplot as ...

  7. matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。

    最近跑深度学习,提出的feature是4096维的,放到我们的程序里,跑得很慢,很慢.... 于是,一怒之下,就给他降维处理了,但是matlab 自带的什么pca( ), princomp( )函数, ...

  8. PCA降维参数介绍

    https://www.cnblogs.com/pinard/p/6243025.html#undefined

  9. PCA与LDA

随机推荐

  1. Android Studio布局等XML文件怎么改都恢复原状的问题

    编译时,XML布局文件报错,点击链接进去改,怎么改,一编译就恢复原状,这是什么原因,问题出在点击错误链接进的是中间生成XML文件,这个文件改动是没用的,需要改动原始layout文件才会生效.

  2. MAC OSX下用pip安装lxml时遇到xmlversion.h not found的解决办法

    http://blog.csdn.NET/wave_1102/article/details/37730589 今天在Mac下用pip安装lxml,总是报如下错误: etree_defs.h::: f ...

  3. 畅通工程-HZNU寒假集训

    畅通工程 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只 ...

  4. Apache Flink 流处理实例

    维基百科在 IRC 频道上记录 Wiki 被修改的日志,我们可以通过监听这个 IRC 频道,来实时监控给定时间窗口内的修改事件.Apache Flink 作为流计算引擎,非常适合处理流数据,并且,类似 ...

  5. python的统一编码规范

    请注意这一点:没有编码规范的代码没有阅读价值,也更谈不上复用. 目前业界比较流行的Python的编码规范目前主要有PEP8的编程.Google的编码风格.Python Guide和Pocoo Styl ...

  6. Spring Boot @Async 异步任务执行

    1.任务执行和调度 Spring用TaskExecutor和TaskScheduler接口提供了异步执行和调度任务的抽象. Spring的TaskExecutor和java.util.concurre ...

  7. 妙用this关键字

    妙用this关键字 ## this关键字一般this关键字都是指的是对象的本身,在类的所有方法.构造器都可以拿到this引用,这是jvm"偷偷"帮我们传递进来的引用,指向调用方法对 ...

  8. ES2015也就是ES6知识点持续更新

    ES6,全名:ECMAScript2015,先扯点其他的,ECMA是一个国际标准化组织,它最重要最重要的作用就是让ECMAScript这门语言标准化,什么意思呢?我们知道,js这门脚本语言是运行在浏览 ...

  9. 【转】sentry 实时事件日志聚合平台

    1.install postgreSQL(v9.6)2.pip install sentry(v8.13.0)3.sentry init #初始化配置文件 4.配置好postgreSQL 需要连接re ...

  10. Python模块操作

    Exceptions 模块 该模块定义了以下标准异常: • Exception 是所有异常的基类. 强烈建议(但不是必须)自定义的异常异常也继承这个类. • SystemExit(Exception) ...