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语言,写这个blog主要就是个教程大纲,之前先列出一些资源:Python历史:http://www.docin.com/p-53019548.html ...
- 详解Java的Spring框架中的注解的用法
转载:http://www.jb51.net/article/75460.htm 1. 使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: class UserMa ...
- SOFA 源码分析 — 链路数据透传
前言 SOFA-RPC 支持数据链路透传功能,官方解释: 链路数据透传功能支持应用向调用上下文中存放数据,达到整个链路上的应用都可以操作该数据. 使用方式如下,可分别向链路的 request 和 re ...
- Redis linux 外部telnet访问不通
外部访问不通: 1.修改redis.conf中的daemonize的值设为no: 2.修改redis.conf中的bind的值127.0.0.1为linux本身的ip地址,如192.168.1.120
- Python撸支付宝红包教程,行走在灰色产业边缘的程序员!
2018年刚到就作死撸羊毛(支付宝).2017年用分享给支付宝好友链接的官方通道"撸"了400大洋. 如许天天早上7:30便起床开愉快心的分享红包链接.200多个老友分享完一次 ...
- java.util.logging的使用
秉承着某种执念我今天决定不用Logback而是和Java的logging肛到底,现在总结一下研究成果: 日志等级 日志等级有七种,severe,warning,info,fine,finer,fine ...
- Flask构建微电影(二)
第三章.项目分析.搭建目录及模型设计 3.1.前后台项目目录分析 微电影网站 前台模块 后台模块 前台(home) 数据模型:models.py 表单处理:home/forms.py 模板目录:tem ...
- python3 爬取qq音乐作者所有单曲 并且下载歌曲
1 import requests import re import json import os # 便于存放作者的姓名 zuozhe = [] headers = {'User-Agent': ' ...
- Lucene入门案例一
1. 配置开发环境 官方网站:http://lucene.apache.org/ Jdk要求:1.7以上 创建索引库必须的jar包(lucene-core-4.10.3.jar,lucene-anal ...
- MYSQL复制原理及其流程
Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其他主机(slave)上,并重新执行一遍来实现 ...