特征选取方法PCA与LDA
一、主成分分析(PCA)介绍
什么是主成分分析?
主成分分析是一种用于连续属性降维的方法,把多指标转化为少数几个综合指标。 它构造了原始属性的一个正交变换,将一组可能相关的变量转化为一组不相关的变量,只需要少量变量就可以解释原始数据大部分信息。
主成分分析其实就是一个线性变换,这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。
主成分分析的思想
主成分分析法是一种降维的统计方法,它借助于一个正交变换,将其分量相关的原随机向量转化成其分量不相关的新随机向量,这在代数上表现为将原随机向量的协方差阵变换成对角形阵,在几何上表现为将原坐标系变换成新的正交坐标系,使之指向样本点散布最开的\(m\)个正交方向,然后对多维变量系统进行降维处理,使之能以一个较高的精度转换成低维变量系统,再通过构造适当的价值函数,进一步把低维系统转化成一维系统
主成分分析是设法将原来众多具有一定相关性的指标,重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来\(p\)个指标作线性组合,作为新的综合指标。最经典的做法就是用\(F_1\)(选取的第一个线性组合,即第一个综合指标)的方差来表达,即\(Var(F_1)\)越大,表示\(F_1\)包含的信息越多。因此在所有的线性组合中选取的\(F_1\)应该是方差最大的,故\(F_1\)称为第一主成分。如果第一主成分不足以代表原来\(p\)个指标的信息,再考虑选取\(F_2\)即选第二个线性组合,为了有效地反映原来信息,\(F_1\)已有的信息就不需要再出现再\(F_2\)中,用数学语言表达就是要求\(cov(F_1,F_2)=0\),则称\(F_2\)为第二主成分,依此类推可以构造出第三、第四,……,第\(p\)个主成分。
主成分分析计算步骤
设原始变量\(X_1,X_2,...,X_p\)的n次观测数据矩阵为:
\[
X = \left [
\begin{matrix}
x_{11} & x_{12} & ... & x_{1p} \\
x_{21} & x_{22} & ... & x_{2p} \\
\vdots & \vdots & \vdots & \vdots \\
x_{n1} & x_{n2} & ... & x_{np}
\end{matrix}\right ] = (X_1,X_2,...,X_p)
\]将数据矩阵按列进行标准化,将标准化后的数据矩阵依然记做\(X\)
计算矩阵\(X\)的相关系数矩阵\(R=(r_{ij})_{p \times p}\)
求相关系数矩阵\(R\)的特征值\(\lambda_1 \geq \lambda_2 \geq ... \geq \lambda_p\)
- 确定m个主成分使得
\[
\frac{\sum_{i=1}^m \lambda_i}{\sum_{i=1}^p \lambda_i} \geq \alpha
\]其中\(\alpha\)一般取\(0.85\) - 计算m个相应特征值的单位特征向量\(\beta_1,\beta_2,...,\beta_m\),其中
\[
\beta_i = \left [
\begin{matrix}
\beta_{1i} \\
\beta_{2i} \\
\vdots \\
\beta_{pi}
\end{matrix}
\right ]
\] 计算主成分公式为:
\[
Z_i = X\beta_i=\beta_{1i}X_1+\beta_{2i}X_2+...+\beta_{pi}X_p \quad i=1,2,..,m
\]
即\((Z_1,Z_2,...,Z_m)\)构成新的特征组。
PCA的推导过程
方差最大化理论:在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好,方差越大包含的信息越多。
\(F_1,F_2,...,F_m\)是前m个主成分指标,由于\(F_i\)是\(X_1,X_2,...,X_p\)的线性组合,即可以表示为
\[
\left \{
\begin{matrix}
F_1 = a_{11}X_1+a_{12}X_2+...+a_{1p}X_p \\
F_2 = a_{21}X_1+a_{22}X_2+...+a_{2p}X_p \\
... \\
F_m = a_{m1}X_1+a_{m2}X_2+...+a_{mp}X_p \\
\end{matrix}
\right.
\]
根据前面的分析可知:
- \(F_i,F_j\)相互独立,即为\(Cov(F_i,F_j)=0\)
- \(F_1\)是\(X_1,X_2,...,X_p\)一切线性组合中方差最大的,...,\(F_m\)是与\(F_1,F_2,...,F_{m-1}\)独立的\(X_1,X_2,...,X_p\)的一切线性组合中方差最大者。
我们的任务就是要计算出系数\(a_{ij}\),从数学上可以证明原变量相关协方差矩阵的特征值就是主成分的方差,所以前m个特征根就对应前m个最大线性组合的方差,而特征值对应的特征向量就是线性组合的系数,即为:
- $ X\beta_i=\lambda_i\beta_i$
- \(Var(F_i)=\lambda_i\)
- \(\beta_i=(a_{i1},a_{i2},...,a_{ip})\)
二、线性判别法(LDA)介绍
线性判别分析(Linear Discriminant Analysis)LDA,也称为Fisher线性判别(Fisher’s Linear Discriminant),它是模式识别中的经典算法。
LDA的思想
线性判别法的基本思想是将高维模式下的样本投影到最佳的鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果。投影后保证模式在新的子空间有最大的类间距离和最小的类内距离,即模式在空间中具有最佳的可分离性。
LAD与PCA的比较: LDA与PCA都是常用的降维技术,PCA主要是通过特征的协方差角度去找到最佳的投影方式,LDA则是考虑了标注,即希望投影后不同类的间距尽量大,同一类的间距尽量小。
LDA的原理
LDA属于线性分类器,首先来学习二分类LDA的原理:
- LDA的目标是在维护尽可能多的类别差异信息的同时进行维度缩减
- 给出 \(n\)个\(d\)维向量\(x_1,x_2,...,x_n\),其中有\(N_1\)个属于类别\(w_1\),\(N_2\)个属于类别\(w_2\),在所有的投影方式\(y=w^Tx\)中,找到最大的可分离线(求权向量\(w\))。
上图中按照不同的方向投影得到的分类效果是不一样的,显然第二种方法投影分类效果最好。下面对用到的几个变量进行定义:
\(\mu_i\)表示类别\(i\)的中心,上面二分类中两个类的中心就是\(\mu_1,\mu_2\),第\(i\)类中心的计算方法为:
\[
\mu_i = \frac{1}{N_i}\sum_{x \in w_i}{x}
\]
其中\(w_i\)表示第\(i\)类的样本集合,\(N_i\)表示第\(i\)类的样本个数,该等式表达意义其实就是第\(i\)类点的中心位置(位置的平均值)\(\tilde{\mu_i}\)表示第\(i\)类投影后的中心,不难得到:
\[
\tilde{\mu_i}=\frac{1}{N_i}\sum_{x \in w_i}{w^Tx}=w^T\frac{1}{N_i}\sum_{x \in w_i}{x}=w^T\mu_i
\]\(\tilde{S_i}\) 来表示投影后类内的分散程度,它的定义为:
\[
\tilde{S_i} = \sum_{y \in w_i}(y-\tilde{\mu_i})^2
\]
说白了,它其实就是类似一个方差的含义。最终我们定义目标函数:
\[
J=\frac{|\tilde{\mu_1}-\tilde{\mu_2}|}{\tilde{S_1}+\tilde{S_2}}
\]
我们需要最大化目标函数,为什么要这样呢?回忆LDA的思想:LDA使得投影后类间的距离尽量大,在这里就是分子尽量大,还要使得类内的距离尽量小,这里就是分母尽量小。
\[
|\tilde{\mu_1}-\tilde{\mu_2}|^2=(\tilde{\mu_1}-\tilde{\mu_2})(\tilde{\mu_1}-\tilde{\mu_2})^T=w^T(\mu_1-\mu_2)(\mu_1-\mu_2)^Tw=w^TS_bw
\]
上等式中令\((\mu_1-\mu_2)(\mu_1-\mu_2)^T=S_b\),.
定义原第\(i\)类的分散程度为\(S_i\),则
\[
S_i=\sum_{x \in w_i} |x-\mu_i|^2=\sum_{x \in w_i} (x-\mu_i)^T
\]
并令\(S_w=S_1+S_2\),于是得到
\[
\tilde{S_i}=\sum_{y \in w_i}|y-\tilde{\mu_i}|^2=\sum_{x \in w_i}|w^Tx-w^T\mu_i|^2=\sum_{x \in w_i}{w^T(x-\mu_i)(x-\mu_i)^Tw}=w^T(\sum_{x \in w_i}{(x-\mu_i)(x_mu_i)^T})w=w^TS_iw
\]
进一步得到
\[
\tilde{S_1}+\tilde{S_2}=w^TS_ww
\]
于是有
\[
J(w)=\frac{w^TS_bw}{w^TS_ww}
\]
接下来我们需要确定参数\(w\)使得\(J\)达到最大值,在此可用求导来做:
\[
\frac{dJ}{dw}=\frac{d}{dw}[\frac{w^TS_bw}{w^TS_ww}] = 0\Longrightarrow (w^TS_bw)\frac{d[w^TS_ww]}{dw}=(w^TS_ww)\frac{d[w^TS_bw]}{dw} \Longrightarrow (w^TS_bw)(2S_ww)=(w^TS_ww)(2S_bw) \Longrightarrow \frac{w^TS_bw}{w^TS_ww}S_ww=S_bw \Longrightarrow JS_ww=S_bw
\]
最后得到
\[
S_w^{-1}S_bw=Jw
\]
于是问题就简单了,\(J\)即为矩阵\(S_w^{-1}S_b\)的最大特征值,\(w\)为对应的特征向量。下面的步骤就是求解特征向量了...。实际上还有一种化简方法更简单,请看下面化简步骤:
\[
S_bw=(\mu_1-\mu_2)(\mu_1-\mu_2)^Tw=(\mu_1-\mu_2)R
\]
其中\(R=(\mu_1-\mu_2)^Tw\)是一个常量
\[
Jw=S_w^{-1}S_bw=S_w^{-1}(\mu_1-\mu_2)R
\]
于是得到
\[
w=\frac{R}{J}S_w^{-1}(\mu_1-\mu_2)
\]
由于\(\frac{R}{J}\)是一个常数,最后\(w\)向量实际就为
\[
w=S_w^{-1}(\mu_1-\mu_2)
\]
LDA 多分类问题
对于LDA的C分类问题,我们需要\(C-1\)个映射\([y_1,y_2,...,y_{C-1}]\),意味着需要C-1个投影向量\(w_i\),将每一个向量看作一列,这样可以组长一个矩阵\(W=[w_1|w_2|...|w_{C-1}]\)
对于LDA的C分类问题,我们需要\(C-1\)个映射\([y_1,y_2,...,y_{C-1}]\),意味着需要C-1个投影向量\(w_i\),将每一个向量看作一列,这样可以组长一个矩阵\(W=[w_1|w_2|...|w_{C-1}]\),
\[
y_i = w_i^Tx \Longrightarrow y = W^Tx
\]
每一类的分散程度表示为
\[
S_i = \sum_{x \in w_i}(x-\mu_i)(x-\mu_i)^T \quad 其中 \mu_i = \frac{1}{N_i}\sum_{x \in w_i}x
\]
于是类内分算程度常量\(S_w\)表示为
\[
S_w = \sum_{i=1}^C{S_i}
\]
类间的常量为
\[
S_b = \sum_{i=1}^C{N_i(u_i-u)(u_i-u)^T} 其中 \mu = \frac{1}{N}\sum{x} 表示所有数据的中心
\]
本文还需要修改.......
特征选取方法PCA与LDA的更多相关文章
- PCA和LDA
一.PCA 在讲PCA之前,首先有人要问了,为什么我们要使用PCA,PCA到底是干什么的?这里先做一个小小的解释,举个例子:在人脸识别工作中一张人脸图像是60*60=3600维,要处理这样的数 ...
- 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
四大机器学习降维算法:PCA.LDA.LLE.Laplacian Eigenmaps 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映 ...
- 【转】四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
最近在找降维的解决方案中,发现了下面的思路,后面可以按照这思路进行尝试下: 链接:http://www.36dsj.com/archives/26723 引言 机器学习领域中所谓的降维就是指采用某种映 ...
- 人脸识别经典算法一:特征脸方法(Eigenface)
这篇文章是撸主要介绍人脸识别经典方法的第一篇,后续会有其他方法更新.特征脸方法基本是将人脸识别推向真正可用的第一种方法,了解一下还是很有必要的.特征脸用到的理论基础PCA在另一篇博客里:特征脸(Eig ...
- 特征选取1-from sklearn.feature_selection import SelectKBest
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 转 :scikit-learn的GBDT工具进行特征选取。
http://blog.csdn.net/w5310335/article/details/48972587 使用GBDT选取特征 2015-03-31 本文介绍如何使用scikit-learn的GB ...
- scikit-learn的GBDT工具进行特征选取。
http://blog.csdn.net/w5310335/article/details/48972587 使用GBDT选取特征 2015-03-31 本文介绍如何使用scikit-learn的GB ...
- jQuery选择器和选取方法 http://www.cnblogs.com/MaxIE/p/4078869.html
我们已经使用了带有简单Css选择器的jQuery选取函数:$().现在是时候深入了解jQuery选择器语法,以及一些提取和扩充选中元素集的方法了. 一.jQuery选择器 在CSS3选择器标淮草案定义 ...
- PCA与LDA的区别与联系
由于涉及内容较多,这里转载别人的博客: http://blog.csdn.net/sunmenggmail/article/details/8071502 其实主要在于:PCA与LDA的变换矩阵不同, ...
随机推荐
- python脚本运行的几种方式
1.脚本式编程 将如下代码拷贝至 hello.py文件中: print ("Hello, Python!"); 通过以下命令执行该脚本: $ python ./hello.py h ...
- window下golang包管理glide使用说明
golang是一门简洁高效的开发 语言,但是包管理一直是一个痛点,如图 : 很多开源项目特别是github.com中的大量应用golang.org和google.golang.org中的源码,且由于被 ...
- Java 原子性引用 AtomicReference
http://www.jianshu.com/p/882d0e2c3ea6 实现 原子操作 使用场景: 一个线程使用student对象,另一个线程负责定时读表,更新这个对象.那么就可以用AtomicR ...
- KVM(五)libvirt 介绍
1. Libvirt 是什么 为什么需要Libvirt? Hypervisor 比如 qemu-kvm 的命令行虚拟机管理工具参数众多,难于使用. Hypervisor 种类众多,没有统一的编程接口来 ...
- java callable future futuretask
Runnbale封装一个异步运行的任务,可以把它想象成一个没有任何参数和返回值的异步方法.Callable和Runnable相似,但是它有返回值.Callable接口是参数化的类型,只有一个方法cal ...
- Redis 源码走读(一)事件驱动机制与命令处理
eventloop 从 server.c 的 main 方法看起 int main(int argc, char **argv) { ....... aeSetBeforeSleepProc(serv ...
- 训练指南 UVALive - 3126(DAG最小路径覆盖)
layout: post title: 训练指南 UVALive - 3126(DAG最小路径覆盖) author: "luowentaoaa" catalog: true mat ...
- 洛谷——P1480 A/B Problem
P1480 A/B Problem 题目描述 输入两个整数a,b,输出它们的商(a<=10^5000,b<=10^9) 输入输出格式 输入格式: 两行,第一行是被除数,第二行是除数. 输出 ...
- ( 转 ) 优秀REST风格 API的设计原则
设计优秀的REST风格API非常困难!API是服务提供方和使用方之间的契约,打破该契约将会给服务端开发人员招来非常大的麻烦,这些麻烦来自于使用API的开发人员,因为对API的改动会导致他们的移动app ...
- Reference resources
CentOS7 (精简操作指令) http://www.centoscn.com/CentOS/help/2016/0429/7147.html