一.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]T2=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满足一下条件:

SbXjjSwXj,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的更多相关文章

  1. PCA与LDA的区别与联系

    由于涉及内容较多,这里转载别人的博客: http://blog.csdn.net/sunmenggmail/article/details/8071502 其实主要在于:PCA与LDA的变换矩阵不同, ...

  2. 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps

    四大机器学习降维算法:PCA.LDA.LLE.Laplacian Eigenmaps 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映 ...

  3. 【转】四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps

    最近在找降维的解决方案中,发现了下面的思路,后面可以按照这思路进行尝试下: 链接:http://www.36dsj.com/archives/26723 引言 机器学习领域中所谓的降维就是指采用某种映 ...

  4. PCA和LDA降维的比较

    PCA 主成分分析方法,LDA 线性判别分析方法,可以认为是有监督的数据降维.下面的代码分别实现了两种降维方式: print(__doc__) import matplotlib.pyplot as ...

  5. matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。

    最近跑深度学习,提出的feature是4096维的,放到我们的程序里,跑得很慢,很慢.... 于是,一怒之下,就给他降维处理了,但是matlab 自带的什么pca( ), princomp( )函数, ...

  6. PCA与LDA介绍

    PCA(主成分分析) PCA是一种无监督降维方式,它将数据投影到一组互相正交的loading vectors(principal axes)之上,并保证投影后的点在新的坐标轴上的方差最大 记数据集\( ...

  7. 特征选取方法PCA与LDA

    一.主成分分析(PCA)介绍 什么是主成分分析?   主成分分析是一种用于连续属性降维的方法,把多指标转化为少数几个综合指标. 它构造了原始属性的一个正交变换,将一组可能相关的变量转化为一组不相关的变 ...

  8. PCA与LDA

  9. 线性判别分析(LDA), 主成分分析(PCA)及其推导【转】

    前言: 如果学习分类算法,最好从线性的入手,线性分类器最简单的就是LDA,它可以看做是简化版的SVM,如果想理解SVM这种分类器,那理解LDA就是很有必要的了. 谈到LDA,就不得不谈谈PCA,PCA ...

随机推荐

  1. Mybatis 的日志管理

    Mybatis通过日志工厂提供日志信息,Mybatis内置的日志模版是log4j,commons.log,jdk log也可以通过slf4j简单日志模版结合log4j使用日志信息输出.具体选择哪个日志 ...

  2. oracle group 语句探究(笔记)

    1.group by语句在oracle中没有排序功能,必须依靠order by才能实现按照预定结果的排序 2.group by 的cube扩展 with test as ( id, name from ...

  3. 常用gradle命令

    1.build.gradle ext { profile = "dev" tag='web' if (project.hasProperty('pro')) { temp = pr ...

  4. Data Developer Center > Learn > Entity Framework > Get Started > Loading Related Entities

    Data Developer Center > Learn > Entity Framework > Get Started > Loading Related Entitie ...

  5. GPIO初始化之PB3/PB4/PA13/PA14/PA15引脚的复用--寄存器版本

    为了节省IO资源单片机会在一个IO上复用很多功能,一般的单片机用到 一个功能后就能再用两外复用的功能了,这就体现出了STM32 GPIO的强大功能了,我们用重映射的方法把其中一个外设映射到其他IO脚上 ...

  6. 30.DDR2问题2_local_init_done为什么没拉高?

    按照初始化时序,在200us时,mem_clk时钟稳定,开始初始化设置,设置完后,会产生一个初始化完成标志,local_init_done会拉高,没有拉高,可能有以下几个原因: 1.确认DDR2 IP ...

  7. linux 简单的DMA例程

    一个简单的使用DMA 例子 示例:下面是一个简单的使用DMA进行传输的驱动程序,它是一个假想的设备,只列出DMA相关的部分来说明驱动程序中如何使用DMA的. 函数dad_transfer是设置DMA对 ...

  8. UIStepper swift

    // // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...

  9. 【上传AppStore】iOS项目上传到AppStore步骤流程(第三章) - 基本信息总汇

    一.App ID(bundle identifier) App ID即Product ID,用于标识一个或者一组App. App ID应该和Xcode中的Bundle Identifier是一致(Ex ...

  10. Session invalidate

    会清空所有已定义的session 而不是清空全部session的值也就是说 定义了一个名为 user 的session 调用invalidate()方法后使用Session.getValue(“use ...