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

本文深入介绍了线性判别式分析(LDA)算法,包括其概述、假设、符号说明、公式推导、算法形式化描述、物理意义和思考。通过一个具体的分类问题实例,解释了如何运用LDA算法实现样本分类,包括计算类间离散度矩阵、类内离散度矩阵、特征向量及其在分类过程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:http://blog.csdn.net/warmyellow/article/details/5454943

LDA算法入门

 

一. LDA算法概述:

线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的。性鉴别分析的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间中有最佳的可分离性。因此,它是一种有效的特征抽取方法。使用这种方法能够使投影后模式样本的类间散布矩阵最大,并且同时类内散布矩阵最小。就是说,它能够保证投影后模式样本在新的空间中有最小的类内距离和最大的类间距离,即模式在该空间中有最佳的可分离性。

二. LDA假设以及符号说明:

假设对于一个空间有m个样本分别为x1,x2,……xm 即 每个x是一个n行的矩阵,其中表示属于i类的样本个数,假设有一个有c个类,则

………………………………………………………………………… 类间离散度矩阵

………………………………………………………………………… 类内离散度矩阵

………………………………………………………………………… 属于i类的样本个数

 …………………………………………………………………………… 第i个样本

 …………………………………………………………………………… 所有样本的均值

 …………………………………………………………………………… 类i的样本均值

 

 

 

 

三. 公式推导,算法形式化描述

根据符号说明可得类i的样本均值为:

 …………………………………………………………………… (1

同理我们也可以得到总体样本均值:

………………………………………………………………………… (2

根据类间离散度矩阵和类内离散度矩阵定义,可以得到如下式子:

  ……………………………………………… (3

http://hi.csdn.net/attachment/201004/11/47140_1270987769CK7K.png…………………………………… (4

当然还有另一种类间类内的离散度矩阵表达方式:

其中是指i类样本的先验概率,即样本中属于i类的概率(),把代入第二组式子中,我们可以发现第一组式子只是比第二组式子都少乘了1/m,我们将在稍后进行讨论,其实对于乘不乘该1/m,对于算法本身并没有影响,现在我们分析一下算法的思想,

我们可以知道矩阵的实际意义是一个协方差矩阵,这个矩阵所刻画的是该类与样本总体之间的关系,其中该矩阵对角线上的函数所代表的是该类相对样本总体的方差(即分散度),而非对角线上的元素所代表是该类样本总体均值的协方差(即该类和总体样本的相关联度或称冗余度),所以根据公式(3)可知(3)式即把所有样本中各个样本根据自己所属的类计算出样本与总体的协方差矩阵的总和,这从宏观上描述了所有类和总体之间的离散冗余程度。同理可以的得出(4)式中为分类内各个样本和所属类之间的协方差矩阵之和,它所刻画的是从总体来看类内各个样本与类之间(这里所刻画的类特性是由是类内各个样本的平均值矩阵构成)离散度,其实从中可以看出不管是类内的样本期望矩阵还是总体样本期望矩阵,它们都只是充当一个媒介作用,不管是类内还是类间离散度矩阵都是从宏观上刻画出类与类之间的样本的离散度和类内样本和样本之间的离散度。

LDA做为一个分类的算法,我们当然希望它所分的类之间耦合度低,类内的聚合度高,即类内离散度矩阵的中的数值要小,而类间离散度矩阵中的数值要大,这样的分类的效果才好。

这里我们引入Fisher鉴别准则表达式:

…………………………………………………………… (5

其中为任一n维列矢量。Fisher线性鉴别分析就是选取使得达到最大值的矢量作为投影方向,其物理意义就是投影后的样本具有最大的类间离散度和最小的类内离散度。

我们把公式(4)和公式(3)代入公式(5)得到:

我们可以设矩阵其中可以看成是一个空间,也就是说构成的低维空间(超平面)的投影。也可表示为,而当样本为列向量时,即表示空间的几何距离的平方。所以可以推出fisher线性鉴别分析表达式的分子即为样本在投影空间下的类间几何距离的平方和,同理也可推出分母为样本在投影空间下的类内几何距离的平方差,所以分类问题就转化到找一个低维空间使得样本投影到该空间下时,投影下来的类间距离平方和与类内距离平方和之比最大,即最佳分类效果。

所以根据上述思想,即通过最优化下面的准则函数找到有一组最优鉴别矢量构成的投影矩阵(这里我们也可以看出1/m可以通过分子分母约掉,所以前面所提到的第一组公式和第二组公式所表达的效果是一样的).

……………… (6

可以证明,当为非奇异(一般在实现LDA算法时,都会对样本做一次PCA算法的降维,消除样本的冗余度,从而保证是非奇异阵,当然即使为奇异阵也是可以解的,可以把对角化,这里不做讨论,假设都是非奇异的情况)时,最佳投影矩阵的列向量恰为下来广义特征方程

………………………………………………………………………… (7

d个最大的特征值所对应的特征向量(矩阵的特征向量),且最优投影轴的个数d<=c-1.

根据(7)式可以推出……………………………………………… (8

又由于

下面给出验证:把(7)式代入(6)式可得:

 

 

 

四. 算法的物理意义和思考

4.1 用一个例子阐述LDA算法在空间上的意义

下面我们利用LDA进行一个分类的问题:假设一个产品有两个参数来衡量它是否合格,

我们假设两个参数分别为:

参数A

参数B

是否合格

2.95

6.63

合格

2.53

7.79

合格

3.57

5.65

合格

3.16

5.47

合格

2.58

4.46

不合格

2.16

6.22

不合格

3.27

3.52

不合格

实验数据来源:http://people.revoledu.com/kardi/tutorial/LDA/Numerical%20Example.html

所以我们可以根据上图表格把样本分为两类,一类是合格的,一类是不合格的,所以我们可以创建两个数据集类:

cls1_data =

    2.9500    6.6300

    2.5300    7.7900

    3.5700    5.6500

3.1600    5.4700

 

cls2_data =

    2.5800    4.4600

    2.1600    6.2200

    3.2700    3.5200

 

其中cls1_data为合格样本,cls2_data为不合格的样本,我们根据公式(1),(2)可以算出合格的样本的期望值,不合格类样本的合格的值,以及总样本期望:

E_cls1 =

3.0525    6.3850

E_cls2 =

2.6700    4.7333

E_all =

2.8886    5.6771

我们可以做出现在各个样本点的位置:

图一

其中蓝色‘*’的点代表不合格的样本,而红色实点代表合格的样本,天蓝色的倒三角是代表总期望,蓝色三角形代表不合格样本的期望,红色三角形代表合格样本的期望。从xy轴的坐标方向上可以看出,合格和不合格样本区分度不佳。

我们在可以根据表达式(3),(4)可以计算出类间离散度矩阵和类内离散度矩阵:

Sb =

    0.0358    0.1547

0.1547    0.6681

Sw =

    0.5909   -1.3338

   -1.3338    3.5596

我们可以根据公式(7),(8)算出特征值以及对应的特征向量:

L =

    0.0000         0

         0    2.8837

对角线上为特征值,第一个特征值太小被计算机约为0

与他对应的特征向量为

V =

   -0.9742   -0.9230

0.2256   -0.3848

根据取最大特征值对应的特征向量:(-0.9230,-0.3848),该向量即为我们要求的子空间,我们可以把原来样本投影到该向量后 所得到新的空间(2维投影到1维,应该为一个数字)

new_cls1_data =

 

   -5.2741

   -5.3328

   -5.4693

   -5.0216

为合格样本投影后的样本值

new_cls2_data =

   -4.0976

   -4.3872

   -4.3727

为不合格样本投影后的样本值,我们发现投影后,分类效果比较明显,类和类之间聚合度很高,我们再次作图以便更直观看分类效果

图二

蓝色的线为特征值较小所对应的特征向量,天蓝色的为特征值较大的特征向量,其中蓝色的圈点为不合格样本在该特征向量投影下来的位置,二红色的‘*’符号的合格样本投影后的数据集,从中个可以看出分类效果比较好(当然由于xy轴单位的问题投影不那么直观)。

我们再利用所得到的特征向量,来对其他样本进行判断看看它所属的类型,我们取样本点

2.815.46),

我们把它投影到特征向量后得到:result = -4.6947 所以它应该属于不合格样本。

4.2 LDA算法与PCA算法

在传统特征脸方法的基础上,研究者注意到特征值打的特征向量(即特征脸)并一定是分类性能最好的方向,而且对K-L变换而言,外在因素带来的图像的差异和人脸本身带来的差异是无法区分的,特征连在很大程度上反映了光照等的差异。研究表明,特征脸,特征脸方法随着光线,角度和人脸尺寸等因素的引入,识别率急剧下降,因此特征脸方法用于人脸识别还存在理论的缺陷。线性判别式分析提取的特征向量集,强调的是不同人脸的差异而不是人脸表情、照明条件等条件的变化,从而有助于提高识别效果。

<think>首先,用户的问题是:“我想了解线性判别分析LDA)如何确定降维后的维度 请问线性判别分析 LDA 如何选择降维后的特征维度”。这是在问LDA降维时如何选择降维后的维度。 我需要基于系统级指令来构建回答: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考的站内引用: - 引用[1]: 描述了LDA的基本思想:投影后使相同类别的点更接近,形成簇。 - 引用[2]: 提到LDA的目标是“投影后类内方差最小,类间方差最大”,并给出了一个Python实现示例。 用户的问题是关于LDA如何选择降维后的维度。LDA在降维时,降维后的维度通常与类别数量有关。具体来说,对于一个有$C$个类别的数据集,LDA降维后的最大维度是$C-1$。这是因为LDA的目标是最大化类间散度相对于类内散度的比值,这导致特征空间被投影到一个最多$C-1$维的子空间。 关键点: - LDA降维后的维度由类别的数量决定。 - 最大维度是$C-1$,其中$C$是类别数。 - 在实际应用中,可以根据特征值的大小来选择具体维度,比如选择前$k$个最大的特征值对应的特征向量。 在数学上,LDA求解一个广义特征值问题:$S_b \mathbf{w} = \lambda S_w \mathbf{w}$,其中$S_b$是类间散度矩阵,$S_w$是类内散度矩阵。特征值$\lambda$表示该方向上的判别能力。特征值越大,判别能力越强。因此,选择前$k$个最大特征值对应的特征向量,其中$k \leq C-1$。 回答结构: 1. **介绍LDA降维维度的基本原理**:解释为什么维度与类别数相关。 2. **详细说明选择方法**:基于特征值选择维度。 3. **给出示例或步骤**:如何在实际中实现。 4. **添加引用**:自然地引用提供的参考。 5. **生成相关问题**:在最后添加相关问题。 生成相关问题: - 类似于示例,列出3-4个相关问题。 确保LaTeX正确: - 行内数学:如$C-1$,$S_b$,$S_w$。 - 独立公式:如特征值方程,使用$$...$$。 完整回答框架: 1. **开头解释**:简要回顾LDA,然后直接回答问题。 2. **核心原理**:描述维度选择。 3. **实现示例**:参考引用[2],提到Python实现。 4. **总结**。 5. **相关问题**。</think>### 线性判别分析LDA)如何选择降维后的特征维度 线性判别分析LDA)是一种有监督降维方法,其核心思想是将高维数据投影到低维空间,使得投影后的数据在同类样本中方差最小化,在异类样本间方差最大化[^1]。选择降维后的特征维度(即目标维度)是LDA的关键步骤,主要由数据集的类别数量决定,并结合特征值的分析来实现。下面我将逐步解释这一过程。 #### 1. **LDA降维维度的基本原理** LDA降维后的最大维度取决于数据集中的类别数量。对于一个有$C$个类别的分类问题,LDA最多可以将数据投影到$C-1$维子空间。这是因为LDA的目标是最大化类间散度($S_b$)与类内散度($S_w$)的比值,这等价于求解一个广义特征值问题: $$ S_b \mathbf{w} = \lambda S_w \mathbf{w} $$ 其中: - $S_b$ 是类间散度矩阵,衡量不同类别间的差异。 - $S_w$ 是类内散度矩阵,衡量同一类别内的样本聚集程度。 - $\mathbf{w}$ 是投影方向向量,$\lambda$ 是对应的特征值,表示该方向的判别能力大小。 特征值$\lambda$的大小直接反映了投影方向的判别能力:$\lambda$越大,该方向对区分类别的贡献越大。因此,降维后的维度$k$必须满足$k \leq C-1$。例如: - 如果数据集有2个类别($C=2$),则最大降维维度为1(即$k=1$),投影后是一维直线。 - 如果数据集有3个类别($C=3$),则最大降维维度为2(即$k=2$),投影后是二维平面[^1]。 #### 2. **如何选择具体维度$k$** 实际应用中,降维后的维度$k$通常小于或等于$C-1$,选择依据是特征值$\lambda$的累积贡献率或特定阈值。以下是常用方法: - **特征值排序法**:计算所有特征值$\lambda_1, \lambda_2, \dots, \lambda_{C-1}$,并按从大到小排序。选择前$k$个最大特征值对应的特征向量作为投影方向,确保这些特征值的累积和占总特征值之和的比例超过预设阈值(如85%或90%)。数学公式为: $$ \frac{\sum_{i=1}^{k} \lambda_i}{\sum_{j=1}^{C-1} \lambda_j} \geq \theta $$ 其中$\theta$是阈值(例如0.85)。如果特征值快速衰减,$k$可能远小于$C-1$。 - **类别数约束**:在类别数$C$较小时(如$C=2$),$k$通常固定为$C-1$,因为更低的维度会损失判别信息。 - **实际考虑**:如果数据维度很高但类别数少,LDA会自动将维度降至$C-1$以下。例如,在引用[2]的Python示例中,数据集有2个类别,降维后维度为1,输出结果如`[[-1.732], [-1.732], ...]`,这符合$k=C-1$原则[^2]。 #### 3. **实现步骤示例** 在实际编程中(如Python的scikit-learn库),LDA降维维度的选择是自动处理的。以下是关键步骤: - **输入数据**:确保数据有标签,LDA需要类别信息。 - **求解特征值**:计算$S_b$和$S_w$的广义特征值分解,获取特征值列表。 - **选择$k$**:基于特征值累积贡献率确定$k$,或直接设置`n_components=k`参数。 参考引用[2]的代码,LDA通过奇异值分解(SVD)实现: ```python from sklearn.discriminant_analysis import LinearDiscriminantAnalysis import numpy as np # 示例数据:6个样本,2个特征,2个类别 X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) y = np.array([1, 1, 1, 2, 2, 2]) # 类别标签 # 初始化LDA,n_components指定降维后的维度(默认为C-1=1) lda = LinearDiscriminantAnalysis(solver='svd', n_components=None) # n_components=None时自动选择k=C-1 lda.fit(X, y) X_transformed = lda.transform(X) # 降维后输出一维数据 print(X_transformed) # 输出:[[-1.732], [-1.732], [-3.464], [1.732], [1.732], [3.464]] ``` 在这个例子中,类别数$C=2$,所以降维维度$k=1$(即$C-1$)。如果手动设置`n_components=1`,结果相同[^2]。 #### 4. **注意事项** - **优点**:LDA的维度选择基于类别信息,能有效保留判别特征,适合分类任务。 - **限制**:如果类别数$C$很小(如$C=2$),降维后维度固定,无法进一步压缩;如果数据维度低于$C-1$,LDA可能不适用。 - **对比PCA**:与无监督的PCA不同,LDA的维度选择受类别数约束,而PCA可根据方差贡献率灵活选择任意维度[^1]。 总之,LDA选择降维维度$k$的核心是类别数$C$和特征值分析,确保投影后类内方差最小、类间方差最大[^1]。在实际中,通过特征值累积贡献率或直接使用$k=C-1$来优化模型性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值