费舍尔线性分辩分析(Fisher‘s Linear Discriminant Analysis, FLDA)

费舍尔线性判别分析(FLDA):原理与实现
费舍尔线性判别分析(FLDA)是一种用于分类和特征降维的方法,其目标是最大化类别间方差与类别内方差之比,以找到最佳投影方向。在二分类情况下,FLDA寻找投影矩阵W,使得类间方差最大化而类内方差最小化。多分类时,FLDA涉及最大特征值的计算。通过计算类内和类间散度矩阵,可以找到投影矩阵W。代码示例展示了如何在MNIST数据集上应用FLDA进行二分类和多分类任务。

费舍尔线性分辩分析(Fisher’s Linear Discriminant Analysis, FLDA)

1. 问题描述

为解决两个或多个类别的分类问题,大多数机器学习(ML)算法的工作方式相同。

通常,它们采用某种形式的转换来对输入数据进行处理,以降低原始输入维度到一个新的(更小)维度。其目的是将数据投影到新的空间中。然后,在投影后,它们尝试通过找到线性分离来对数据点进行分类。例如,我们有如下数据,
在这里插入图片描述

对数据直接进行线性分类显然不是最佳的方法,但是如果我们将数据投影到一维空间,我们可以找到一个线性分类器,将数据分为两个类别。这就是费舍尔线性判别分析(FLDA)的基本思想。我们将数据做如下操作:

y = x 0 2 + x 1 2 y=x_{0}^2+x_{1}^2 y=x02+x12

其中, x 0 x_{0} x0 x 1 x_{1} x1是原始数据的两个特征。我们可以看到,通过这种方式,我们将数据投影到了一维空间,然后我们可以找到一个线性分类器,将数据分为两个类别。投影后的数据如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uSabBiva-1690806540681)(image-1.png)]

通常,我们要探寻一种将数据从高维向低维度转换的方式,这被称为表征学习(Representation Learning)。深度学习也是表征学习的 一种,但在深度学习中,我们不需要猜测哪种转换会导致数据的最佳表示,算法会自行解决。

但是,请记住,无论是表示学习还是手工特征,模式都是相同的。我们需要以某种方式改变数据,使其更加适用于分类任务。

2. 二分类情况

假设我们有 C 1 C_1 C1 C 2 C_2 C2两个类别的样本,每个样本维度为 D D D,样本数为 n 1 n_1 n1 n 2 n_2 n2。我们的目标是找到一个投影矩阵 W W W,将数据投影到一维空间:

x ^ = W ⊤ x \hat{x}=W^{\top}x x^=Wx

设新样本 x ^ \hat{x} x^的维度为1,则 W W W的维度为 D × 1 D \times 1 D×1

那么,我们该如何寻找 W W W呢?换句话说,我们寻找的 W W W应该符合什么条件呢?

这就是费舍尔线性判别(Fisher’s Linear Discriminant, FLD)发挥作用的地方。

费舍尔提出的想法是最大化一个函数,该函数将在投影后的类均值之间产生大的分离,同时在每个类内部给出小的方差,从而最小化类之间的重叠。

换句话说,FLD选择最大化类别间分离的投影方法。为此,它最大化类别间方差与类别内方差之比。

简而言之,为了将数据投影到更小的维度并避免类别重叠,FLD保持了两个属性:

  • 数据集类别间具有很大的方差。

  • 数据集每个类别内部具有较小的方差。

请注意,较大的类别间方差意味着投影后的类别平均值应该尽可能远离彼此。相反,较小的类别内方差会使投影后的数据点更加接近。

计算每个类别的均值,我们可以得到:

μ 1 = 1 n 1 ∑ x ∈ C 1 x , μ 2 = 1 n 2 ∑ x ∈ C 2 x \mu_{1}=\frac{1}{n_{1}} \sum_{x \in C_{1}} x, \quad \mu_{2}=\frac{1}{n_{2}} \sum_{x \in C_{2}} x μ1=n11xC1x,μ2=n21xC2x

其中, m 1 m_1 m1 m 2 m_2 m2分别是 C 1 C_1 C1 C 2 C_2 C2类的均值。经过投影后,

μ ^ 1 = W ⊤ μ 1 , μ ^ 2 = W ⊤ μ 2 \hat{\mu}_{1}=W^{\top} \mu_{1}, \quad \hat{\mu}_{2}=W^{\top} \mu_{2} μ^1=Wμ1,μ^2=Wμ2

其中, μ ^ 1 \hat{\mu}_{1} μ^1 μ ^ 2 \hat{\mu}_{2} μ^

<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$来优化模型性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ace2NoU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值