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
随机推荐
- 如何利用Python网络爬虫抓取微信朋友圈的动态(上)
今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...
- iframe 背景透明设置--兼容IE
iframe标签添加: allowTransparency="true"属性. 子文件body背景设置透明: background-color: transparent;.
- (一)SpringBoot基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
- C/C++静态代码安全检查工具
静态代码安全检查工具是一种能够帮助程序员自动检测出源程序中是否存在安全缺陷的软件.它通过逐行分析程序的源代码,发现软件中潜在的安全漏洞.本文针对 C/C++语言程序设计中容易存在的多种安全问题,分别分 ...
- mysql在ubuntu中的操作笔记(详)
1.安装mysql客户端流程: - 登录navicat官网下载 - 将压缩包拷贝ubuntu中进行解压,解压命令:tar zxvf navicat.tar.gz - 进入解压目录,运行命令./s ...
- SQLServer 导入大脚本文件
1.cmd 你懂的 2.这里呢得引入一下OSQL,先看看帮助文档:osql -? 3.osql -E -i C:\Users\DNT\Desktop\BigValues.sql-E 表示使用 Wind ...
- Makefile基础---编译
首先写一个自己的库: #include "../MyAPI.h" #include <cstdlib> #include <ctime> int getRa ...
- Ubuntu系统下解决“YourUserName不在sudoers文件中。此事将被报告”的问题
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=624 问题描述: 之前在使用Fedora系统时遇到过在使用 sudo 时提示"YourUserName不在 ...
- 基于 WebRTC 创建一款多人联机游戏
本项目的目标旨在尽可能少用服务器资源的前提下研发一款在线多人游戏,同时期望在一个用户的浏览器上运行游戏,同时让另一个玩家来连接.此外还希望程序尽可能简单以便于在博客中分析. 运用的技术 在我刚接触 P ...
- Node.js 专题
前提电脑中已经安装过NodeJS, npm.现在需要进行升级操作.1.查看当前的npm和NodeJs的版本: C:\Users\Administrator>node -v v4.4.3 C:\U ...