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的一种特例,其中假设每个类别的Gaussian分布共享相同的协方差矩阵:对所有\(\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的情况下,对高斯的协方差矩阵\(\Sigma_k\)没有假设,导致二次决策面。更多细节请参见[1]

1.2.3. LDA降维的数学公式#

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

如上所述,我们可以将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\)来自(居中)矩阵的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’求解器需要计算协方差矩阵,因此可能不适用于特征数量较多的情况。

参考文献