PCA和LDA
一.PCA
在讲PCA之前,首先有人要问了,为什么我们要使用PCA,PCA到底是干什么的?这里先做一个小小的解释,举个例子:在人脸识别工作中一张人脸图像是60*60=3600维,要处理这样的数据,计算量肯定很大,为了能降低后续计算的复杂度,节约时间,我们在处理高维数据的时候,在“预处理”阶段通常要先对原始数据进行降维,而PCA就是做的这个事。本质上讲,PCA就是讲高维的数据通过线性变换投影到低维空间上去,这个投影可不是随便投投,我们要找出最能代表原始数据的投影方法,亦即不失真,可以这么理解,被PCA降掉的那些维度只能是那些噪声或者是冗余数据。
下面就先讲一下PCA算法的主要过程:
主成分分析(Principal Component Analysis,PCA),是寻求有效的线性变换的经典方法之一,它的目的是在最小均方意义下寻找最能代表原始数据的投影方向,从而达到对特征空间进行降维的目的。
这里,我们首先做一些简单的定义。对于一个人脸样本集,模式类别有C个:ω1,ω2,...,ωc,第i类有训练样本ni个:ξi1,ξi2,...,ξim,每个样本是m*n向量。
1.把所有的图像矩阵按列进行列向量化;
首先,什么是向量化矩阵呢?我们定义A=(A1,A2,...,Am)€Rm*n,定义mn*1的向量
这里,样本图像构成一个m*n的图像矩阵 I,可以将图像矩阵 I 转化为mn*1的图像向量ξ,即ξ=Vec(I)。
2.计算平均列向量,列向量中心化;
第i类训练样本的均值为:
设训练样本个数为N,则全体训练样本的均值为:
3.计算协方差矩阵S;
类间散布矩阵为:
这里,P(wi)是第i类样本的先验概率。简单解释一下,例如我们又2个类,第一个类有40个样本,第二个类有60个样本,那么
P(1)=40/(40+60)=0.4
P(2)=60/(40+60)=0.6
我们可以知道St的实际意义是一个协方差矩阵,这个矩阵所刻画的是该类与样本总体之间的关系,其中该矩阵对角线上的函数所代表的的是该类相对样本总体的方差(即分散度),而非对角线上的元素所代表的是该类样本总体均值的协方差(即该类和总体样本的相关联度或称冗余度)。
4.计算写协方差矩阵S的特征值和特征向量,保留d个最大的特征值,以及这d个特征值所对应的特征向量,且要把这些特征向量正交标准化,从而就构成了新的子空间的基矩阵;
定义准则函数:
J(X)=XTS1X
最大化该准则函数的单位向量X称为最优投影向量,其物理意义是:图像向量在X方向上投影后得到的特征向量的总体散度程度最大。事实上,该最优投影向量即为类间散步矩阵S1的最大特征值所对应的单位特征向量。一般来说,在样本类别数较多的情况下,单一的投影方向是不够的,需要寻找一组满足标准正交条件且极大化准则函数的最优投影向量X1,X2,...,Xd。
最优投影向量组X1,X2,...,Xd,可取为S1的d个最大特征值所对应的标准正交的特征向量。
令W=[X1,X2,...,Xd],W€Rm*n称为最优投影矩阵。
5.将训练样本和测试样本投影到这个子空间上,然后我们选择合适的分类器和相异度测试公式对测试样本进行分类。
最优投影向量组X1,X2,...,Xd可用于特征提取。对已知的样本图像向量ξ,令:
Y=XkTξ(k=1,2,...,d)
投影特征X1,X2,...,Xd称为向量ξ的主成分(Principal component),利用获得的主成分可构成ξ的d维的特征向量B=[Y1,Y2,...,Yd]T,即B=WTξ。
6.分类
接下来就是分类了,对于一个测试样本,我们寻找投影后它跟哪些训练样本投影后靠得比较近,那么我们就可以把他们归于一类。
常用的分类方法有最近邻法,最小距离法,这里就不做介绍了。
好了,终于讲完了PCA算法的主要过程,但是估计还会有人问为什么只提取特征值较大的几个特征值对应的特征向量就可以近似代替原样本矩阵呢?其实我们知道了矩阵的特征值和特征向量的数学意义,这个问题就很好解释了。
以二维矩阵A=[1 0;0 0.01]为例,容易得到A的两个特征值λ1=1,e1=[1 0]T,λ2=0.01,e2=[0 1]T,那么x=[2 3]T经过A变换为Bx=[2 0.03]T,如果我们认为λ2太小忽略掉时,Bx≈[2 0]T。
例如,平面上一个短轴远小于长轴的椭圆,那么椭圆上的点在短轴上的分布明显弱于长轴,我们可以认为他近似于一条直线,也就是说我们用PCA降掉了短轴这一维。
二.LDA
线性判别式分析(Linear Discriminant Analysis,LDA),也叫做Fisher线性判别(Fisher Linear Discrininant,FLD),是模式识别的经典算法,它是在1996年有Belhumeur引入模式识别和人工智能领域的。线性鉴别分析的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间(即投影后)具有最大的类间距离和最小的类内距离,也就是说样本在该空间上有最佳的可分离性。
下面,我们就来具体看一下LDA算法的主要步骤:
与PCA不同的是,LDA是有监督学习,需要用到样本类信息,即训练样本是带有类标签的,也就是说我事先知道样本类别。
1.把所有图像矩阵按列进行列向量化;
2.计算平均列向量;
3.列向量中心化;
这3步呢,与PCA一样,都是算法的数据预处理过程,就不做多说了。
4.计算Sb,Sw;
Sb代表类间协方差矩阵:
Sw代表类内协方差矩阵:
St代表总体协方差矩阵:
可以证明St=Sb+Sw。
5.利用Fisher准则计算特征值和特征向量;
Fisher鉴别准则函数定义:
从上式我们可以看出Fisher鉴别准则函数将样本在投影矢量上的类间散度和类内散度结合在一起,为我们确定最优投影方向提供了一个准则。我们选取是的准则函数J(X)达到最大的矢量X作为我们的投影方向,这就是最佳投影向量,这个最佳投影向量的物理意义是:投影后的样本具有最大的类间散度,同时具备最小的类内散度。
6.保留d个最大的特征值,及这d个特征值所对应的特征向量,且要把这些特征向量正交标准化,从而就构成了新的子空间的基矩阵;
在实际应用中经典的Fisher线性鉴别分析最优投影轴族,即最优的投影矩阵W的列向量X1,X2,...,Xd一般取为广义特征方程SbX=λSwX的d个最大的特征值所对应的特征项。即X1,X2,...,Xd满足一下条件:
SbXj=λjSwXj,j=1,2,...,d,其中X1≥...≥Xd
由于SbX=λSwX之多存在C-1个非零特征向量,故最优投影的个数d≤C-1,也就是说若有10类人脸样本,那么d≤9。
注:在PCA算法中,d<N,N是训练样本个数,这里有所区别,不能混淆。
7.将训练样本和测试样本投影到这个子空间上,然后我们选择合适的分类器和相异度测试公式对样本进行分类。
这一部分跟PCA一样,就不在累赘了。
缺陷:研究表明,特征脸方法随着光线,角度和人脸尺寸等因素的引入,识别率急剧下降,PCA和LDA提取的特征向量集,强调的是不同人脸差异而不是人脸表情、照明条件等条件的变化,因此特征脸方法用于人脸识别还存在很多缺陷。
本文中有任何问题或漏洞,欢迎不吝指正,谢谢大家!
转载请注明出处:http://www.cnblogs.com/Rosanna/p/3270113.html
PCA和LDA的更多相关文章
- PCA与LDA的区别与联系
由于涉及内容较多,这里转载别人的博客: http://blog.csdn.net/sunmenggmail/article/details/8071502 其实主要在于:PCA与LDA的变换矩阵不同, ...
- 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
四大机器学习降维算法:PCA.LDA.LLE.Laplacian Eigenmaps 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映 ...
- 【转】四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
最近在找降维的解决方案中,发现了下面的思路,后面可以按照这思路进行尝试下: 链接:http://www.36dsj.com/archives/26723 引言 机器学习领域中所谓的降维就是指采用某种映 ...
- PCA和LDA降维的比较
PCA 主成分分析方法,LDA 线性判别分析方法,可以认为是有监督的数据降维.下面的代码分别实现了两种降维方式: print(__doc__) import matplotlib.pyplot as ...
- matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。
最近跑深度学习,提出的feature是4096维的,放到我们的程序里,跑得很慢,很慢.... 于是,一怒之下,就给他降维处理了,但是matlab 自带的什么pca( ), princomp( )函数, ...
- PCA与LDA介绍
PCA(主成分分析) PCA是一种无监督降维方式,它将数据投影到一组互相正交的loading vectors(principal axes)之上,并保证投影后的点在新的坐标轴上的方差最大 记数据集\( ...
- 特征选取方法PCA与LDA
一.主成分分析(PCA)介绍 什么是主成分分析? 主成分分析是一种用于连续属性降维的方法,把多指标转化为少数几个综合指标. 它构造了原始属性的一个正交变换,将一组可能相关的变量转化为一组不相关的变 ...
- PCA与LDA
- 线性判别分析(LDA), 主成分分析(PCA)及其推导【转】
前言: 如果学习分类算法,最好从线性的入手,线性分类器最简单的就是LDA,它可以看做是简化版的SVM,如果想理解SVM这种分类器,那理解LDA就是很有必要的了. 谈到LDA,就不得不谈谈PCA,PCA ...
随机推荐
- C/C++ 内存管理 (《高质量C++》-- 整理笔记)
内存管理是我们在编程时经常遇到的问题,而关于内存管理的问题往往会导致我们无从下手,这篇随笔是我阅读<高质量C++>第7章“内存管理”时一些总结. 1.内存分配方式 在C++中内存分为5个区 ...
- JavaScript 字符串处理详解【转自:http://www.cnblogs.com/mondLei/p/4096855.html】
一.创建字符串 创建一个字符串,将一组字符串用引号包起来,将其赋值给一个字符串变量. var JsStr="Hello,JavaScript String!"; 二.字 ...
- MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能
1.MVC4.0中HandleErrorAttribte已经帮我们处理了异常问题,当我们新建一个非空的MVC项目时候,在FilterConfig中会发现这样的代码 public class Filte ...
- 关于如何将Excel数据导入到SQL Server中
面对大量的Excel数据我们可能会非常苦恼,如果一条一条的插入到数据库:不仅会耗大量的时间,而且还可能会发生错误,现在我来说一下如何导入数据! 1.准备工作 首先要在Excel中建立数据表对应的数据字 ...
- easyui 布局自适应
最近在把以前写的一个项目改成用easyui做前端.过程中遇到了不少问题.其中一个就是datagrid不能很好的布局.想了好多办法都有局限.最后想到会不会是布局(easyui-layout)的问题,经过 ...
- UML 中的用例图解析以及starUML详细介绍
UML中的用例(Use Case)概念分析及StarUML实例 在UML 中use case 似 乎最簡單的,用例建模的最主要功能就是用来表达系统的功能性需求或行为,依我的理解用例建模可分为用例图和用 ...
- DebugViewHierarchy
DebugViewHierarchy(视图调试)是XCode6新出的一项功能,它可以让开发者在程序运行时,动态的查看当前界面的显示情况,包括视图的层次,控件的大小和位置,而且会以3D效果显示当前视图的 ...
- Python科学计算(一)环境简介——Anaconda Python
Anaconda Python 是 Python 科学技术包的合集,功能和 Python(x,y) 类似.它是新起之秀,已更新多次了.包管理使用 conda,GUI基于 PySide,所有的包基本上都 ...
- 使用log4javascript记录日志
1.定义log4js服务类,用于初始化log4javascript相关参数 log4jsService.js //启用javascript 日志功能 var logger = log4javascri ...
- JS正则表达式 替换括号,尖括号等
function toTxt(str) { var RexStr = /\<|\>|\"|\'|\&/g str = str.replace(RexStr, functi ...