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 的特例,其中假设每个类别的 Gaussians 共享相同的协方差矩阵:\(\Sigma_k = \Sigma\) 对于所有 \(k\)。这将对数后验简化为

\[\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 的情况下,对 Gaussians 的协方差矩阵 \(\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 比 Ledoit 和 Wolf 公式与 shrinkage=”auto” 一起使用时给出的估计器产生更小的均方误差。在 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\) 来自(居中)矩阵的 SVD:\(X_k = U S V^t\)。事实证明,我们可以计算上述对数后验,而无需显式计算 \(\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’ 求解器需要计算协方差矩阵,因此可能不适用于特征数量较多的情况。

参考文献