为什么有两个类,LDA 只给出一个维度?

机器算法验证 主成分分析 Python 降维 判别分析
2022-03-27 11:42:11

我正在使用降维算法。线性判别分析 (LDA) 是一种考虑到类标签的监督算法(例如,PCA 不是这种情况)。我正在使用 Python 对一些算法进行比较研究。

为什么有两个类(k = 2),无论数据维度如何,LDA 都给出一维,即新的子空间仅由一维组成?例如,如果我尝试将我的数据集(100 个属性和 2 个类)投影到 10 维空间,LDA(n_components=10)我只获得 1 维?

因为k>2我可以获得我指定为的判别向量的数量n_components我怎样才能获得n_components尺寸k=2

3个回答

像@amoeba 一样,我不明白您在 Q1 和 Q2 之间的区别:无论如何,LDA 最多获得维度。对于,这是一维,对于,它将是 7。当然,如果输入空间的维数较低,那就是限制因素。k1k=2k=8


LDA 背后的一个想法/启发式方法是,如果它们都是相同大小的球体,那么分离类很容易:那么您所需要的就是与类均值的距离。或者,您可以说类均值之间的连接是适合分离平面的法线向量。
在该叙述中,您可以将 LDA 视为一种投影,它首先对池化协方差矩阵进行奇异值分解(即与 PCA非常相似的东西),以便获得具有此类球形类的空间。让我们称之为我们的主要得分空间。

根据您所在领域的习惯,这可以是池化协方差矩阵的 PCA 得分空间 = 以相应类均值为中心的数据矩阵的 PCA 得分空间,或者是根据特征值/SVD 对角矩阵压缩的 PCA 得分空间(默认情况下,某些字段将 PCA 的缩放比例放入负载中,其他字段 [mine] 放入分数中)。

主要得分空间仍然具有对应于以相应类均值为中心的池化协方差矩阵/数据矩阵的秩的维度。该空间中的池化协方差矩阵是一个单位球体,即每个类被认为是一个以各自类均值为中心的单位球体,该均值也投影到分数空间中。

(此时,我们可以推导出其他使用 SVD 投影作为启发式但不利用/依赖于假设的单位大小的类的球形形状的分类算法。)

现在,由于我们有单位球面类形状,剩下的唯一需要关心的是类均值。点。即使我们的初级分数空间有更高的维度,个点也会形成一个维的形状(单形)。因此,在不损失任何东西的情况下,我们可以进一步旋转我们的主要分数空间,以便我们的类均值单纯形位于前维度中。 对于假设的球形类,所有进一步的维度都不能帮助区分:这些类在这些进一步的维度中具有完全相同的大小和位置。因此,我们将它们扔掉。kkk1k1k1

(同样,您可以派生另一个分类器,该分类器使用前两个投影步骤,但随后保留 [一些] 那些进一步的维度,因为实践中的类可能不是球形的。)


在比较 LDA 和 PCA 时要研究的一个分类器是SIMCA,它可以被视为类似于 LDA 的一类分类器。

在 SIMCA 中,您会发现模型内空间和模型外空间的概念:在模型内空间中,您可以检测到类内通常变化的相同类型的变化(但可能具有不寻常的幅度)。在模型外空间中,您可以检测到通常不会出现在任何类中的类型的变体。

对于我们对 LDA 的描述,我们保留的维度将是模型内空间,而其余维度是模型外空间。与 SIMCA 相比,解释会略有不同,但您应该对此有所了解。k1

从文档中:

discriminant_analysis.LinearDiscriminantAnalysis 可用于执行有监督的降维,方法是将输入数据投影到由最大化类之间分离的方向组成的线性子空间(在下面的数学部分讨论的精确意义上)。输出的维度必然小于类的数量,所以这通常是一个相当强的降维,并且只在多类设置中才有意义。

http://scikit-learn.org/stable/modules/lda_qda.html

LDA是一种有监督的算法,它搜索一个低维空间,用于最大化类间方差,最小化类内方差。这是本文中的一个简单算法线性判别分析:详细教程
可以在最后一步选择低维空间的维数(= 最大 k 特征值) 计算 LDA 技术的低维子空间的步骤。