PCA与LDA介绍
PCA(主成分分析)
PCA是一种无监督降维方式,它将数据投影到一组互相正交的loading vectors(principal axes)之上,并保证投影后的点在新的坐标轴上的方差最大
- 记数据集\(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}\)
- 假设需求解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}\)
\(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}\))
记\(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}\)为正交矩阵,它的列为对应的特征向量
投影后的方差可以写成\(\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\)时取到
\(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\)时取到
对于\(\vec{\phi}_i, i=3,...,m\)可以按上述步骤依次求得,方差的最大值为\(\lambda_i\),并且仅当\(\vec{\phi}_i=\vec{v}_i\)时取到
实际应用中首先将数据集\(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\)个类,需保证投影后的点在新的坐标轴上类内离散度尽可能小,同时类间离散度尽可能大
- 记\(\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}\)
- 记\(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}\))
- 假设投影向量为\(\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}\)
- 由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}\)
- 为了使类内离散度尽可能小,同时类间离散度尽可能大,先将类内离散度转化为常数,然后只考虑类间离散度。因此首先进行一个空间变换,使得新空间上的协方差矩阵变为单位矩阵,对\(\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\)
- 新空间上的类间离散度变为\(\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步)
- 综上所述,最终求得的投影向量\(\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\)上)
- 对于\(\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个特征值和特征向量
- 参考文献: The Elements of Statistical Learning(2nd Edition)
PCA与LDA介绍的更多相关文章
- 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
四大机器学习降维算法:PCA.LDA.LLE.Laplacian Eigenmaps 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映 ...
- PCA和LDA
一.PCA 在讲PCA之前,首先有人要问了,为什么我们要使用PCA,PCA到底是干什么的?这里先做一个小小的解释,举个例子:在人脸识别工作中一张人脸图像是60*60=3600维,要处理这样的数 ...
- 【转】四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
最近在找降维的解决方案中,发现了下面的思路,后面可以按照这思路进行尝试下: 链接:http://www.36dsj.com/archives/26723 引言 机器学习领域中所谓的降维就是指采用某种映 ...
- PCA与LDA的区别与联系
由于涉及内容较多,这里转载别人的博客: http://blog.csdn.net/sunmenggmail/article/details/8071502 其实主要在于:PCA与LDA的变换矩阵不同, ...
- 特征选取方法PCA与LDA
一.主成分分析(PCA)介绍 什么是主成分分析? 主成分分析是一种用于连续属性降维的方法,把多指标转化为少数几个综合指标. 它构造了原始属性的一个正交变换,将一组可能相关的变量转化为一组不相关的变 ...
- PCA和LDA降维的比较
PCA 主成分分析方法,LDA 线性判别分析方法,可以认为是有监督的数据降维.下面的代码分别实现了两种降维方式: print(__doc__) import matplotlib.pyplot as ...
- matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。
最近跑深度学习,提出的feature是4096维的,放到我们的程序里,跑得很慢,很慢.... 于是,一怒之下,就给他降维处理了,但是matlab 自带的什么pca( ), princomp( )函数, ...
- PCA降维参数介绍
https://www.cnblogs.com/pinard/p/6243025.html#undefined
- PCA与LDA
随机推荐
- 畅通工程-HZNU寒假集训
畅通工程 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只 ...
- Go语言开发区块链只需180行代码
区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链).理解哈希函数是如何保持区块链的完整性.掌握如何用Go语言编程创造并添加新的块.实现多个节点通过竞争生成块. ...
- Heap
#include using namespace std; int heap[100010],cnt=0; void put(int x) { cnt++; heap[cnt]=x; int now= ...
- AJAX的get和post请求原生编写方法
var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState===4){ if(xhr.stat ...
- 使用opencv调用24*24点阵字库和8*16ASCII字库在图片显示文字数字
课程实验:编程读汉字点阵字库,把自己的名字和学号叠加到图片的右下位置. 主要步骤分为三部分 第一部分:读取图片(文件读取) 第二部分:读取文字并从字库中提取相应的编码(字库的存储原理) 第三部分:将相 ...
- python 匿名函数与三元运算
匿名函数 匿名函数就是不需要显示式的指定函数名 首先看一行代码: def calc(x,y): return x*y print(calc(2,3)) # 换成匿名函数 calc = lambda x ...
- Android 样式的开发(转)
Android(2) 目录(?)[-] rectangle oval line ring layer-list篇 普通图片 bitmap标签 点九图片 nine-patch标签 color标签 ...
- System.nanoTime理解
JDK1.5之后java中的计时给出了更精确的方法:System.nanoTime(),输出的精度是纳秒级别,这个给一些性能测试提供了更准确的参考. 但是这个方法有个需要注意的地方,不能用来计算今天是 ...
- 使用WampServer和DVWA在Windows10上搭建渗透测试环境
前言: DVWA是一个具有脆弱性的Web测试应用,需要PHP和MySQL的环境支持.我们可以手动配置DVWA所需的运行环境,也可以使用WampServer进行搭建.WampServer是集成了Apac ...
- java基础之抽象类与接口的形式参数和返回值
抽象类与接口形式参数和返回值问题 1.形参问题 /* 1.形式参数: 基本类型(太简单,不是我今天要讲解的) 引用类型 (1)类名:(匿名对象的时候其实我们已经讲过了) 需要的是该类的对象 (2)抽象 ...