线性判别分析LDA原理总结

article/2025/9/18 20:28:40

转自http://www.cnblogs.com/pinard/p/6244265.html

 在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结。这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结。LDA在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解下它的算法原理。

    在学习LDA之前,有必要将其自然语言处理领域的LDA区别开来,在自然语言处理领域, LDA是隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),他是一种处理文档的主题模型。我们本文只讨论线性判别分析,因此后面所有的LDA均指线性判别分析。

1. LDA的思想

    LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。

    可能还是有点抽象,我们先看看最简单的情况。假设我们有两类数据 分别为红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。

    上图中国提供了两种投影方式,哪一种能更好的满足我们的标准呢?从直观上可以看出,右图要比左图的投影效果好,因为右图的黑色数据和蓝色数据各个较为集中,且类别之间的距离明显。左图则在边界处数据混杂。以上就是LDA的主要思想了,当然在实际应用中,我们的数据是多个类别的,我们的原始数据一般也是超过二维的,投影后的也一般不是直线,而是一个低维的超平面。

    在我们将上面直观的内容转化为可以度量的问题之前,我们先了解些必要的数学基础知识,这些在后面讲解具体LDA原理时会用到。

2. 瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient) 

    我们首先来看看瑞利商的定义。瑞利商是指这样的函数 R(A,x) R(A,x):

R(A,x)=xHAxxHx R(A,x)=xHAxxHx

    其中 x x为非零向量,而 A A n×n n×n的Hermitan矩阵。所谓的Hermitan矩阵就是满足共轭转置矩阵和自己相等的矩阵,即 AH=A AH=A。如果我们的矩阵A是实矩阵,则满足 AT=A AT=A的矩阵即为Hermitan矩阵。

    瑞利商 R(A,x) R(A,x)有一个非常重要的性质,即它的最大值等于矩阵 A A最大的特征值,而最小值等于矩阵 A A的最小的特征值,也就是满足

λminxHAxxHxλmax λmin≤xHAxxHx≤λmax

    具体的证明这里就不给出了。当向量 x x是标准正交基时,即满足 xHx=1 xHx=1时,瑞利商退化为: R(A,x)=xHAx R(A,x)=xHAx,这个形式在谱聚类和PCA中都有出现。

    以上就是瑞利商的内容,现在我们再看看广义瑞利商。广义瑞利商是指这样的函数 R(A,B,x) R(A,B,x):

R(A,x)=xHAxxHBx R(A,x)=xHAxxHBx

    其中 x x为非零向量,而 A,B A,B n×n n×n的Hermitan矩阵。 B B为正定矩阵。它的最大值和最小值是什么呢?其实我们只要通过将其通过标准化就可以转化为瑞利商的格式。我们令 x=B1/2x x′=B−1/2x,则分母转化为:

xHBx=xH(B1/2)HBB1/2x=xHB1/2BB1/2x=xHx xHBx=x′H(B−1/2)HBB−1/2x′=x′HB−1/2BB−1/2x′=x′Hx′

    而分子转化为:

xHAx=xHB1/2AB1/2x xHAx=x′HB−1/2AB−1/2x′

    此时我们的 R(A,B,x) R(A,B,x)转化为 R(A,B,x) R(A,B,x′):

R(A,B,x)=xHB1/2AB1/2xxHx R(A,B,x′)=x′HB−1/2AB−1/2x′x′Hx′

    利用前面的瑞利商的性质,我们可以很快的知道, R(A,B,x) R(A,B,x)的最大值为矩阵 B1/2AB1/2 B−1/2AB−1/2的最大特征值,或者说矩阵 B1A B−1A的最大特征值,而最小值为矩阵 B1A B−1A的最小特征值。如果你看过我写的谱聚类(spectral clustering)原理总结第6.2节的话,就会发现这里使用了一样的技巧,即对矩阵进行标准化。

3. 二类LDA原理

    现在我们回到LDA的原理上,我们在第一节说讲到了LDA希望投影后希望同一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大,但是这只是一个感官的度量。现在我们首先从比较简单的二类LDA入手,严谨的分析LDA的原理。

    假设我们的数据集 D={(x1,y1),(x2,y2),...,((xm,ym))} D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本 xi xi为n维向量, yi{0,1} yi∈{0,1}。我们定义 Nj(j=0,1) Nj(j=0,1)为第j类样本的个数, Xj(j=0,1) Xj(j=0,1)为第j类样本的集合,而 μj(j=0,1) μj(j=0,1)为第j类样本的均值向量,定义 Σj(j=0,1) Σj(j=0,1)为第j类样本的协方差矩阵。

     μj μj的表达式为:

μj=1NjxXjx(j=0,1) μj=1Nj∑x∈Xjx(j=0,1)

     Σj Σj的表达式为:

Σj=xXj(xμj)(xμj)T(j=0,1) Σj=∑x∈Xj(x−μj)(x−μj)T(j=0,1)

    由于是两类数据,因此我们只需要将数据投影到一条直线上即可。假设我们的投影直线是向量 w w,则对任意一个样本本 xi xi,它在直线 w w的投影为 wTxi wTxi,对于我们的两个类别的中心点 μ0,μ1 μ0,μ1,在在直线 w w的投影为 wTμ0 wTμ0 wTμ1 wTμ1。由于LDA需要让不同类别的数据的类别中心之间的距离尽可能的大,也就是我们要最大化 ||wTμ0wTμ1||22 ||wTμ0−wTμ1||22,同时我们希望同一种类别数据的投影点尽可能的接近,也就是要同类样本投影点的协方差 wTΣ0w wTΣ0w wTΣ1w wTΣ1w尽可能的小,即最小化 wTΣ0w+wTΣ1w wTΣ0w+wTΣ1w。综上所述,我们的优化目标为:

argmaxwJ(w)=||wTμ0wTμ1||22wTΣ0w+wTΣ1w=wT(μ0μ1)(μ0μ1)TwwT(Σ0+Σ1)w argmax⏟wJ(w)=||wTμ0−wTμ1||22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w

    我们一般定义类内散度矩阵 Sw Sw为:

Sw=Σ0+Σ1=xX0(xμ0)(xμ0)T+xX1(xμ1)(xμ1)T Sw=Σ0+Σ1=∑x∈X0(x−μ0)(x−μ0)T+∑x∈X1(x−μ1)(x−μ1)T

    同时定义类间散度矩阵 Sb Sb为:

Sb=(μ0μ1)(μ0μ1)T Sb=(μ0−μ1)(μ0−μ1)T

    这样我们的优化目标重写为:

argmaxwJ(w)=wTSbwwTSww argmax⏟wJ(w)=wTSbwwTSww

    仔细一看上式,这不就是我们的广义瑞利商嘛!这就简单了,利用我们第二节讲到的广义瑞利商的性质,我们知道我们的 J(w) J(w)最大值为矩阵 S1wSb Sw−1Sb的最大特征值,而对应的 w w S1wSb Sw−1Sb的最大特征值对应的特征向量!

    注意到对于二类的时候, Sbw Sbw的方向恒为 μ0μ1 μ0−μ1,不妨令 Sbw=λ(μ0μ1) Sbw=λ(μ0−μ1),将其带入: (S1wSb)w=λw (Sw−1Sb)w=λw,可以得到 w=S1w(μ0μ1) w=Sw−1(μ0−μ1), 也就是说我们只要求出原始二类样本的均值和方差就可以确定最佳的投影方向 w w了。

4. 多类LDA原理

    有了二类LDA的基础,我们再来看看多类别LDA的原理。

    假设我们的数据集 D={(x1,y1),(x2,y2),...,((xm,ym))} D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本 xi xi为n维向量, yi{C1,C2,...,Ck} yi∈{C1,C2,...,Ck}。我们定义 Nj(j=1,2...k) Nj(j=1,2...k)为第j类样本的个数, Xj(j=1,2...k) Xj(j=1,2...k)为第j类样本的集合,而 μj(j=1,2...k) μj(j=1,2...k)为第j类样本的均值向量,定义 Σj(j=1,2...k) Σj(j=1,2...k)为第j类样本的协方差矩阵。在二类LDA里面定义的公式可以很容易的类推到多类LDA。

    由于我们是多类向低维投影,则此时投影到的低维空间就不是一条直线,而是一个超平面了。假设我们投影到的低维空间的维度为d,对应的基向量为 (w1,w2,...wd) (w1,w2,...wd),基向量组成的矩阵为 W W, 它是一个 m×d m×d的矩阵。

    此时我们的优化目标应该可以变成为:

WTSbWWTSwW WTSbWWTSwW

    其中 Sb=j=1kNj(μjμ)(μjμ)T Sb=∑j=1kNj(μj−μ)(μj−μ)T, μ μ为所有样本均值向量。 Sw=j=1kSwj=j=1kxXj(xμj)(xμj)T Sw=∑j=1kSwj=∑j=1k∑x∈Xj(x−μj)(x−μj)T

    但是有一个问题,就是 WTSbW WTSbW WTSwW WTSwW都是矩阵,不是标量,无法作为一个标量函数来优化!也就是说,我们无法直接用二类LDA的优化方法,怎么办呢?一般来说,我们可以用其他的一些替代优化目标来实现。

    常见的一个LDA多类优化目标函数定义为:

argmaxWJ(W)=diagWTSbWdiagWTSwW argmax⏟WJ(W)=∏diagWTSbW∏diagWTSwW

    其中 diagA ∏diagA A A的主对角线元素的乘积, W W m×d m×d的矩阵。

      J(W) J(W)的优化过程可以转化为:

J(W)=i=1dwTiSbwii=1dwTiSwwi=i=1dwTiSbwiwTiSwwi J(W)=∏i=1dwiTSbwi∏i=1dwiTSwwi=∏i=1dwiTSbwiwiTSwwi

    仔细观察上式最右边,这不就是广义瑞利商嘛!最大值是矩阵 S1wSb Sw−1Sb的最大特征值,最大的d个值的乘积就是矩阵 S1wSb Sw−1Sb的最大的d个特征值的乘积,此时对应的矩阵 W W为这最大的d个特征值对应的特征向量张成的矩阵。

    由于 W W是一个利用了样本的类别得到的投影矩阵,因此它的降维到的维度d最大值为k-1。为什么最大维度不是类别数k呢?因为 Sb Sb中每个 μjμ μj−μ的秩为1,因此协方差矩阵相加后最大的秩为k(矩阵的秩小于等于各个相加矩阵的秩的和),但是由于如果我们知道前k-1个 μj μj后,最后一个 μk μk可以由前k-1个 μj μj线性表示,因此 Sb Sb的秩最大为k-1,即特征向量最多有k-1个。

5. LDA算法流程

    在第三节和第四节我们讲述了LDA的原理,现在我们对LDA降维的流程做一个总结。

    输入:数据集 D={(x1,y1),(x2,y2),...,((xm,ym))} D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本 xi xi为n维向量, yi{C1,C2,...,Ck} yi∈{C1,C2,...,Ck},降维到的维度d。

    输出:降维后的样本集$D′$

    1) 计算类内散度矩阵 Sw Sw

    2) 计算类间散度矩阵 Sb Sb

    3) 计算矩阵 S1wSb Sw−1Sb

    4)计算 S1wSb Sw−1Sb的最大的d个特征值和对应的d个特征向量 (w1,w2,...wd) (w1,w2,...wd),得到投影矩阵[Math Processing Error]W

    5) 对样本集中的每一个样本特征 xi xi,转化为新的样本 zi=WTxi zi=WTxi

    6) 得到输出样本集 D={(z1,y1),(z2,y2),...,((zm,ym))} D′={(z1,y1),(z2,y2),...,((zm,ym))}

 

    以上就是使用LDA进行降维的算法流程。实际上LDA除了可以用于降维以外,还可以用于分类。一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。

    由于LDA应用于分类现在似乎也不是那么流行,至少我们公司里没有用过,这里我就不多讲了。

6. LDA vs PCA

    LDA用于降维,和PCA有很多相同,也有很多不同的地方,因此值得好好的比较一下两者的降维异同点。

    首先我们看看相同点:

    1)两者均可以对数据进行降维。

    2)两者在降维时均使用了矩阵特征分解的思想。

    3)两者都假设数据符合高斯分布。

    我们接着看看不同点:

    1)LDA是有监督的降维方法,而PCA是无监督的降维方法

    2)LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。

    3)LDA除了可以用于降维,还可以用于分类。

    4)LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。

    这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。

    当然,某些某些数据分布下PCA比LDA降维较优,如下图所示:

7. LDA算法小结

    LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。

    LDA算法的主要优点有:

    1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。

    2)LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

    LDA算法的主要缺点有:

    1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。

    2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。

    3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。

    4)LDA可能过度拟合数据。


http://chatgpt.dhexx.cn/article/lsxXwAvI.shtml

相关文章

线性判别分析(Linear Discriminant Analysis, LDA)算法分析

LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的。性鉴别分析的基本思想是将高维的模式样本投影到…

机器学习笔记17-LDA算法

1. LDA算法简介 LDA(线性判别式分析 Linear Discriminant Analysis)属于机器学习中的监督学习算法,常用来做特征提取、数据降维和任务分类。在人脸识别、人脸检测等领域发挥重要作用。LDA算法与PCA算法都是常用的降维技术。二者的区别在于&a…

数据结构层次遍历二叉树

2022.11.19 计算二叉树的深度和节点个数 任务描述相关知识编程要求测试说明C/C代码 任务描述 本关任务:给定一棵二叉树,借助队列实现层次遍历二叉树。 相关知识 为了完成本关任务,你需要掌握:1.队列基本操作,2.二叉…

树的层次遍历

二叉树的前序、中序、后序遍历我想大家应该都很熟悉了,那我们今天就来讲一下二叉树的层次遍历。 二叉树的前序、中序、后序遍历需要用到栈(递归的过程也就是一个栈),层次遍历需要借助队列这个数据结构。 层次遍历的思路 我们给…

层次遍历_树

哈喽大家好,这里是蒟蒻hanyiyang的博文,今天,我来给大家,介绍一个关于图的算法,希望能帮助到大家!!! 层次遍历 大家来看一看上面这个图,为什么要说这是层次遍历呢&…

树的应用 —— 二叉树的遍历【层次遍历、遍历序列还原树】

树的应用 —— 二叉树的遍历【层次遍历、遍历序列还原树】 【层次遍历】 二叉树的遍历一般有先序遍历、中序遍历和后序遍历,除了这三种遍历,还有另一种遍历方式——层次遍历,即按照层次的顺序从左向右进行遍历。 一棵树如下图所示。 层次…

二叉树:层次遍历算法(自上而下,从左到右)

层次遍历(LevelOrder)就是默认为自上而下,从左到右,一层一层进行遍历, 层次遍历需要借助队列来完成, 队列:先进先出(FIFO)。 分析:如图有一棵二叉树&#xff…

MATLAB符号运算——微分

微分 微分在数学中的定义:由函数Bf(A),得到A、B两个数集,在A中当dx靠近自己时,函数在dx处的极限叫作函数在dx处的微分,微分的中心思想是无穷分割。 在MATLAB中计算微分 函数:diff 调用格式: …

matlab中常用符号

在使用MATLAB的过程中,经常需要对输出图形中的变量进行标注,其中经常遇到的难题就是如何标注各种上标、下标、斜体、黑体、箭头、上圆圈、正负号等特殊符号,以及如何标注特殊的数学符号。这里第一机电网给大家总结一下,希望对大家…

MATLAB符号运算(七)

目录 1、实验目的: 2、实验内容: 1、实验目的: 1)掌握定义符号对象和创建符号表达式的方法; 2)掌握符号运算基本命令和规则; 3)掌握符号表达式的运算法则以及符号矩阵运算&#xf…

MATLAB符号运算小技巧

1. 引言 MATLAB具备强大的符号运算功能。符号运算就是所谓的计算机代数,通俗的说就是利用计算机进行数学公式的推导。这篇文章主要总结几个MATLAB进行符号运算时的小技巧,这也是作者在进行技术研究过程中实际碰到的一些难题,希望后来者能少走…

Matlab-运算符

运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作。MATLAB主要用于整个矩阵和阵列的操作。因此,MATLAB中的运算符既可用于标量数据也可用于非标量数据。MATLAB允许以下类型的基本操作 算术运算符 关系运算符 逻辑运算符 按位运算符 集合运算符…

matlab常见符号运算(计算导数,积分、符号求和等))

符号运算的建立 sym 函数用来建立单个符号量,一般调用格式为: 符号变量 sym(A) 参数 A 可以是一个数或数值矩阵,也可以是字符串 syms 命令用来建立多个符号量,一般调用格式为: syms 符号变量1 符号变量2 … 符号变量…

MATLAB符号变量的创建和简单运算

声明:本文章中数据来自清风老师数学建模课程 文章目录 MATLAB符号变量的创建和简单运算1、符号变量1. 1 符号变量的创建1.2 符号方程的创建3 符号矩阵的创建 2、符号运算2.1 简单运算2.2 表达式的整理2.3 因式分解2.4 多项式展开2.5 合并2.6 计算分子与分母2.7 让结…

第十一章:MATLAB:符号运算(符号与数值,符号矩阵)

第十一章:MATLAB符号运算 11.1. 符号与数值11.1.1. 符号与数值间的转换实例-数值与符号转换 11.1.2. 符号表达式与数值表达式的精度设置实例-魔方矩阵的数值解实例-稀疏矩阵的数值解实例-伴随矩阵的数值解实例-托普利兹矩阵的数值解 11.2. 符号矩阵11.2.1. 符号矩阵…

MATLAB的符号运算基础

在数学运算中,运算的结果如果是一个数值,可以称这类运算为数值运算;如果运算结果为表达式,在MATLAB中称为符号运算,符号计算是对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。MATLAB具有符号数学工具箱…

MATLAB符号运算——积分

积分 积分是微积分学与数学分析里的一个核心概念。通常分为定积分和不定积分两种。直观地说,对于一个给定的正实值函数,在一个实数区间上的定积分可以理解为在坐标平面上,由曲线、直线以及轴围成的曲边梯形的面积值(一种确定的实…

MATLAB的符号计算

MATLAB的符号计算 matlab的符号计算是通过sym、syms 函数去创建符号对象或者符号表达式。例如一元二次函数我们便可以通过syms 函数创建。 syms a b c x y z f1 a * x^2 b * x c; f2 sin(x) * cos(y); f3 (x y)/z; 符号表达式常用运算函数 函数名说明函数名说明facto…

matlab中的符号对象与符号运算

符号对象(Symbolic Objects 不同于普通的数值计算)是Matlab中的一种特殊数据类型,它可以用来表示符号变量、表达式以及矩阵,利用符号对象能够在不考虑符号所对应的具体数值的情况下能够进行代数分析和符号计算(symbolic math operations),例如…

Matlab系列之符号运算(上)

Matlab系列之符号运算 前言创建符号对象基本操作符号变量的基本操作符号表达式的基本操作四则运算多项式的操作符号表达式化简符号表达式的替换反函数求解复合函数 更多精彩等你发现~ 前言 看到文章的名字,可能很多人都没懂意思,如果叫它的另一个名字&a…