1.2. 线性判别分析与二次判别分析#

线性判别分析(LinearDiscriminantAnalysis)和二次判别分析(QuadraticDiscriminantAnalysis)是两种经典的分类器,顾名思义,它们分别具有线性和二次决策面。

这些分类器之所以吸引人,是因为它们具有易于计算的闭式解,本质上是多类别(分类器),在实践中已被证明运行良好,并且没有需要调优的超参数。

ldaqda

该图显示了线性判别分析和二次判别分析的决策边界。底部一行展示了线性判别分析只能学习线性边界,而二次判别分析可以学习二次边界,因此更具灵活性。

示例

1.2.1. 使用线性判别分析进行降维#

LinearDiscriminantAnalysis 可用于执行监督降维,其方法是将输入数据投影到一个线性子空间,该子空间由使类别间分离最大化的方向组成(其精确含义将在下面的数学部分讨论)。输出的维度必然小于类别数,因此这通常是一种相当强的降维,仅在多类别设置中才有意义。

这在transform方法中实现。所需的维度可以使用n_components参数设置。此参数对fitpredict方法没有影响。

示例

1.2.2. LDA和QDA分类器的数学公式#

LDA和QDA都可以从简单的概率模型中推导出来,这些模型对每个类别\(k\)的数据类别条件分布\(P(X|y=k)\)进行建模。然后,对于每个训练样本\(x \in \mathcal{R}^d\),可以使用贝叶斯规则获得预测。

\[P(y=k | x) = \frac{P(x | y=k) P(y=k)}{P(x)} = \frac{P(x | y=k) P(y = k)}{ \sum_{l} P(x | y=l) \cdot P(y=l)}\]

我们选择使该后验概率最大化的类别\(k\)

更具体地说,对于线性判别分析和二次判别分析,\(P(x|y)\)被建模为具有以下密度的多元高斯分布:

\[P(x | y=k) = \frac{1}{(2\pi)^{d/2} |\Sigma_k|^{1/2}}\exp\left(-\frac{1}{2} (x-\mu_k)^t \Sigma_k^{-1} (x-\mu_k)\right)\]

其中\(d\)是特征的数量。

1.2.2.1. QDA#

根据上述模型,后验的对数是:

\[\begin{split}\log P(y=k | x) &= \log P(x | y=k) + \log P(y = k) + Cst \\ &= -\frac{1}{2} \log |\Sigma_k| -\frac{1}{2} (x-\mu_k)^t \Sigma_k^{-1} (x-\mu_k) + \log P(y = k) + Cst,\end{split}\]

其中常数项\(Cst\)对应于分母\(P(x)\),以及高斯分布中的其他常数项。预测的类别是使此对数后验最大化的类别。

注意

与高斯朴素贝叶斯的关系

如果在QDA模型中假设协方差矩阵是对角线矩阵,则输入在每个类别中被认为是条件独立的,并且所得分类器等同于高斯朴素贝叶斯分类器naive_bayes.GaussianNB

1.2.2.2. LDA#

LDA是QDA的一个特例,其中每个类别的高斯分布被假定共享相同的协方差矩阵:对于所有\(k\),都有\(\Sigma_k = \Sigma\)。这将对数后验简化为:

\[\log P(y=k | x) = -\frac{1}{2} (x-\mu_k)^t \Sigma^{-1} (x-\mu_k) + \log P(y = k) + Cst.\]

\((x-\mu_k)^t \Sigma^{-1} (x-\mu_k)\)对应于样本\(x\)和均值\(\mu_k\)之间的马氏距离。马氏距离表示\(x\)\(\mu_k\)的接近程度,同时考虑了每个特征的方差。因此,我们可以将LDA解释为将\(x\)分配给在马氏距离方面其均值最接近的类别,同时考虑类别先验概率。

LDA的对数后验也可以写成[3]

\[\log P(y=k | x) = \omega_k^t x + \omega_{k0} + Cst.\]

其中\(\omega_k = \Sigma^{-1} \mu_k\)\(\omega_{k0} = -\frac{1}{2} \mu_k^t\Sigma^{-1}\mu_k + \log P (y = k)\)。这些量分别对应于coef_intercept_属性。

从上述公式可知,LDA具有线性决策面。对于QDA,对高斯分布的协方差矩阵\(\Sigma_k\)没有假设,因此导致二次决策面。更多详细信息请参见[1]

1.2.3. LDA降维的数学公式#

首先请注意,K均值\(\mu_k\)\(\mathcal{R}^d\)中的向量,它们位于维度至多为\(K - 1\)的仿射子空间\(H\)中(2个点位于一条线上,3个点位于一个平面上,等等)。

如前所述,我们可以将LDA解释为将\(x\)分配给在马氏距离方面其均值\(\mu_k\)最接近的类别,同时考虑类别先验概率。或者,LDA等价于首先对数据进行球化,使协方差矩阵变为单位矩阵,然后根据欧几里得距离将\(x\)分配给最接近的均值(仍然考虑类别先验)。

在此d维空间中计算欧几里得距离,等价于首先将数据点投影到\(H\)中,并在那里计算距离(因为其他维度在距离方面对每个类别贡献相等)。换句话说,如果\(x\)在原始空间中与\(\mu_k\)最接近,那么在\(H\)中也是如此。这表明,LDA分类器中隐含着通过线性投影到\(K-1\)维空间进行的降维。

我们可以通过投影到线性子空间\(H_L\)来进一步降低维度,降至选定的\(L\),该子空间使投影后\(\mu^*_k\)的方差最大化(实际上,我们正在对转换后的类别均值\(\mu^*_k\)进行一种形式的PCA)。这个\(L\)对应于transform方法中使用的n_components参数。更多详细信息请参见[1]

1.2.4. 收缩与协方差估计器#

收缩是一种正则化形式,用于在训练样本数量相对于特征数量较少的情况下改进协方差矩阵的估计。在这种情况下,经验样本协方差是一个较差的估计器,而收缩有助于提高分类器的泛化性能。可以通过将LinearDiscriminantAnalysis类的shrinkage参数设置为'auto'来使用收缩LDA。这会根据Ledoit和Wolf引入的引理[2]以解析方式自动确定最佳收缩参数。请注意,目前收缩仅在将solver参数设置为'lsqr''eigen'时才有效。

shrinkage参数也可以手动设置为0到1之间的值。特别是,值为0表示不收缩(这意味着将使用经验协方差矩阵),值为1表示完全收缩(这意味着将使用方差的对角矩阵作为协方差矩阵的估计)。将此参数设置为这两个极值之间的值将估计协方差矩阵的收缩版本。

收缩的Ledoit和Wolf协方差估计器可能并非总是最佳选择。例如,如果数据分布是正态分布的,则Oracle近似收缩估计器sklearn.covariance.OAS产生的均方误差小于使用shrinkage="auto"Ledoit和Wolf公式所得结果。在LDA中,数据被假定为类别条件高斯分布。如果这些假设成立,使用带有OAS协方差估计器的LDA将比使用Ledoit和Wolf或经验协方差估计器产生更好的分类精度。

可以通过discriminant_analysis.LinearDiscriminantAnalysis类的covariance_estimator参数选择协方差估计器。协方差估计器应具有fit方法和covariance_属性,就像sklearn.covariance模块中的所有协方差估计器一样。

shrinkage

示例

1.2.5. 估计算法#

使用LDA和QDA需要计算对数后验,它取决于类别先验\(P(y=k)\)、类别均值\(\mu_k\)和协方差矩阵。

‘svd’求解器是LinearDiscriminantAnalysis的默认求解器,也是QuadraticDiscriminantAnalysis唯一可用的求解器。它既可以执行分类,也可以执行转换(对于LDA)。由于它不依赖于协方差矩阵的计算,‘svd’求解器在特征数量较多的情况下可能更受欢迎。‘svd’求解器不能与收缩一起使用。对于QDA,SVD求解器的使用基于这样一个事实:协方差矩阵\(\Sigma_k\)根据定义等于\(\frac{1}{n - 1} X_k^tX_k = \frac{1}{n - 1} V S^2 V^t\),其中\(V\)来自(中心化)矩阵\(X_k = U S V^t\)的SVD。事实证明,我们无需显式计算\(\Sigma\)即可计算上述对数后验:通过\(X\)的SVD计算\(S\)\(V\)就足够了。对于LDA,计算两个SVD:中心化输入矩阵\(X\)的SVD和类别均值向量的SVD。

'lsqr'求解器是一种高效算法,仅适用于分类。它需要显式计算协方差矩阵\(\Sigma\),并支持收缩和自定义协方差估计器。该求解器通过求解\(\Sigma \omega = \mu_k\)来计算系数\(\omega_k = \Sigma^{-1}\mu_k\),从而避免了\(\Sigma^{-1}\)的显式计算。

'eigen'求解器基于类间散度与类内散度比率的优化。它既可用于分类,也可用于转换,并支持收缩。然而,'eigen'求解器需要计算协方差矩阵,因此它可能不适用于特征数量较多的情况。

参考文献