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 \mathbb{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的一个特例,其中假设每个类别的Gauessians共享相同的协方差矩阵:对于所有 \(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\) 之间的马氏距离(Mahalanobis Distance)。马氏距离表示 \(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\)\(\mathbb{R}^d\) 中的向量,它们位于一个维度至多为 \(K - 1\) 的仿射子空间 \(H\) 中(2个点位于一条线上,3个点位于一个平面上,等等)。

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

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

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

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

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

shrinkage 参数也可以在0到1之间手动设置。具体来说,值为0对应于没有收缩(这意味着将使用经验协方差矩阵),值为1对应于完全收缩(这意味着将使用方差对角矩阵作为协方差矩阵的估计)。将此参数设置为这两个极值之间的值将估计协方差矩阵的收缩版本。

收缩的Ledoit和Wolf协方差估计器不一定总是最佳选择。例如,如果数据的分布是正态分布,则Oracle Approximating Shrinkage(OAS)估计器 sklearn.covariance.OAS 产生的均方误差小于使用 shrinkage="auto" 的Ledoit和Wolf公式产生的均方误差。在LDA和QDA中,假设数据在类别条件下是高斯分布。如果这些假设成立,则使用带有OAS协方差估计器的LDA和QDA将比使用Ledoit和Wolf或经验协方差估计器产生更好的分类准确率。

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

shrinkage

示例

1.2.5. 估计算法#

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

“svd”求解器是 LinearDiscriminantAnalysisQuadraticDiscriminantAnalysis 使用的默认求解器。它可以执行分类和变换(对于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}\)

LinearDiscriminantAnalysis 的“eigen”求解器基于优化类间散度和类内散度比率。它可用于分类和变换,并支持收缩。对于 QuadraticDiscriminantAnalysis,“eigen”求解器基于计算每个类别协方差矩阵的特征值和特征向量。它允许使用收缩进行分类。然而,“eigen”求解器需要计算协方差矩阵,因此它可能不适合具有大量特征的情况。

References