特征选取方法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的变换矩阵不同, ...
 
随机推荐
- 【洛谷 P2485】 [SDOI2011]计算器 (BSGS)
			
题目链接 第一问:快速幂 第二问:扩欧解线性同余方程 第三问:\(BSGS\) 三个模板 #include <cstdio> #include <cmath> #include ...
 - bzoj 2190 线性生成欧拉函数表
			
首先我们知道,正方形内个是对称的,关于y=x对称,所以只需要算出来一半的人数 然后乘2+1就行了,+1是(1,1)这个点 开始我先想的递推 那么我们对于一半的三角形,一列一列的看,假设已经求好了第I- ...
 - 获取高德地图api
			
先到高德开放平台首页按照关键字搜索地址,获取经纬度坐标: http://lbs.amap.com/console/show/picker 高德由坐标获取地址详细信息: http://restapi.a ...
 - 内核中的多点触摸协议文档 Multi【转】
			
转自:http://www.arm9home.net/read.php?tid=24754 前段时间改写了一个GT801的内核驱动,仔细阅读 MT Event 上报的时候,发现这个驱动是针对 Andr ...
 - Chubby lock service for distributed system
			
Chubby lock service在分布式系统中的应用 Chubby lock service在分布式系统中提供粗粒度的锁服务, 以及可靠的存储. 相比高性能, 设计的重点在于高可靠性和高可用性. ...
 - DIV+CSS设置及问题总结
			
HTML 中有用的字符实体 注释:实体名称对大小写敏感! 显示结果 描述 实体名称 实体编号 空格 < 小于号 < < > 大于号 > > & ...
 - 表单重置 jQuery
			
//重置 $('.reset-bottom').click(function(){ $('.mui-input-clear').attr('value','');//text类型 $('input[n ...
 - 计算器(丑陋版  and  加法专用版)
			
from tkinter import * win = Tk() win.geometry('500x300+400+300') win['bg'] = '#0099ff' win.title('魔方 ...
 - AutoIt 3.0 操作之初体验(第一个脚本hello world)
			
AutoIt 目前最新是v3 版本,它是一个使用类似BASIC 脚本语言的免费软件,它被设计用来进行Windows GUI(图形用户界面)的自动化测试.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来 ...
 - 使用python获取整月每一天的系统监控数据生成报表
			
1.安装阿里开源监控工具tsar tsar官方网站 wget -O tsar.zip https://github.com/alibaba/tsar/archive/master.zip --no-c ...