# 1.2. 线性和二次判别分析
校验者:
[@AnybodyHome](https://github.com/AnybodyHome)
[@numpy](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
[@FAME](https://github.com/apachecn/scikit-learn-doc-zh)
Linear Discriminant Analysis(线性判别分析)([`discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis")) 和 Quadratic Discriminant Analysis (二次判别分析)([`discriminant_analysis.QuadraticDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis.html#sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis "sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis")) 是两个经典的分类器。 正如他们名字所描述的那样,他们分别代表了线性决策平面和二次决策平面。
这些分类器十分具有吸引力,因为他们可以很容易计算得到闭式解(即解析解),其天生具有多分类的特性,在实践中已经被证明很有效,并且无需调参。
**[![ldaqda](https://box.kancloud.cn/767303ac3a30b542e01970079dfd7a77_566x424.jpg)](../auto_examples/classification/plot_lda_qda.html)**
以上这些图像展示了 Linear Discriminant Analysis (线性判别分析)以及 Quadratic Discriminant Analysis (二次判别分析)的决策边界。其中,最后一行表明了线性判别分析只能学习线性边界, 而二次判别分析则可以学习二次边界,因此它相对而言更加灵活。
示例:
[Linear and Quadratic Discriminant Analysis with covariance ellipsoid](../auto_examples/classification/plot_lda_qda.html#sphx-glr-auto-examples-classification-plot-lda-qda-py): LDA和QDA在特定数据上的对比
## 1.2.1. 使用线性判别分析来降维
[`discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis") 通过把输入的数据投影到由最大化类之间分离的方向所组成的线性子空间,可以执行有监督降维(详细的内容见下面的数学推导)。输出的维度必然会比原来的类别数量更少的。因此它总体而言是十分强大的降维方式,同样也仅仅在多分类环境下才能感觉到。
实现方式在 [`discriminant_analysis.LinearDiscriminantAnalysis.transform`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform") 中。关于维度的数量可以通过 `n_components` 参数来调节。 值得注意的是,这个参数不会对 [`discriminant_analysis.LinearDiscriminantAnalysis.fit`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.fit "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.fit") 或者 [`discriminant_analysis.LinearDiscriminantAnalysis.predict`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.predict "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.predict") 产生影响。
示例:
[Comparison of LDA and PCA 2D projection of Iris dataset](../auto_examples/decomposition/plot_pca_vs_lda.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-lda-py): 在 Iris 数据集对比 LDA 和 PCA 之间的降维差异
## 1.2.2. LDA 和 QDA 分类器的数学公式
LDA 和 QDA 都是源于简单的概率模型,这些模型对于每一个类别 ![k](https://box.kancloud.cn/300675e73ace6bf4c352cfbb633f0199_9x13.jpg) 的相关分布 ![P(X|y=k)](https://box.kancloud.cn/0395035c71c3c91c3fab145e55646345_92x19.jpg) 都可以通过贝叶斯定理所获得。
![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)}](https://box.kancloud.cn/4c0559b9c39684dae7a1c9612477313b_506x44.jpg)
我们选择最大化条件概率的类别 ![k](https://box.kancloud.cn/300675e73ace6bf4c352cfbb633f0199_9x13.jpg).
更具体地说,对于线性以及二次判别分析, ![P(X|y)](https://box.kancloud.cn/728d8c5431b02edd14b7b1e9d9d39882_58x19.jpg) 被建模成密度多变量高斯分布:
![p(X | y=k) = \frac{1}{(2\pi)^n |\Sigma_k|^{1/2}}\exp\left(-\frac{1}{2} (X-\mu_k)^t \Sigma_k^{-1} (X-\mu_k)\right)](https://box.kancloud.cn/011a8a2238fd35960328cf5402734cc9_472x45.jpg)
为了把该模型作为分类器使用,我们只需要从训练数据中估计出类的先验概率 ![P(y=k)](https://box.kancloud.cn/a3364f8ed6dd54d932c23c38ad7d2e15_71x18.jpg) (通过每个类 ![k](https://box.kancloud.cn/300675e73ace6bf4c352cfbb633f0199_9x13.jpg) 的实例的比例得到) 类别均值 ![\mu_k](https://box.kancloud.cn/c60c7e3876167b0b5f1d7070d75c037a_18x12.jpg) (通过经验样本的类别均值得到)以及协方差矩阵(通过经验样本的类别协方差或者正则化的估计器 estimator 得到: 见下面的 shrinkage 章节)。
在 LDA 中,每个类别 ![k](https://box.kancloud.cn/300675e73ace6bf4c352cfbb633f0199_9x13.jpg) 的高斯分布共享相同的协方差矩阵:![\Sigma_k = \Sigma](https://box.kancloud.cn/533ae65fa51090aeadb7ccca00058cfd_57x15.jpg) for all ![k](https://box.kancloud.cn/300675e73ace6bf4c352cfbb633f0199_9x13.jpg)。这导致了两者之间的线性决策表面,这可以通过比较对数概率比看出来![\log[P(y=k | X) / P(y=l | X)]](https://box.kancloud.cn/2e5e74a2d4b71700e220d404ee867cf7_221x19.jpg) 。![\log\left(\frac{P(y=k|X)}{P(y=l | X)}\right) = 0 \Leftrightarrow (\mu_k-\mu_l)\Sigma^{-1} X = \frac{1}{2} (\mu_k^t \Sigma^{-1} \mu_k - \mu_l^t \Sigma^{-1} \mu_l)](https://box.kancloud.cn/a03c262cfecf5ba768b4d986c70f109c_529x45.jpg)
在 QDA 中,没有关于高斯协方差矩阵 ![\Sigma_k](https://box.kancloud.cn/e8609e3c57d556e54393f98a1c821f2f_20x15.jpg) 的假设,因此有了二次决策平面. 更多细节见 [\[3\]](#id7) .
Note
**与高斯朴素贝叶斯的关系**
如果在QDA模型中假设协方差矩阵是对角的,则输入被假设为在每个类中是条件独立的,所得的分类器等同于高斯朴素贝叶斯分类器 [`naive_bayes.GaussianNB`](generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") 相同。
## 1.2.3. LDA 的降维数学公式
为了理解 LDA 在降维上的应用,从上面解释的 LDA 分类规则的几何重构开始是十分有用的。我们用 ![K](https://box.kancloud.cn/cdbf8b35090576059f2b14a851c73b86_16x12.jpg) 表示目标类别的总数。 由于在 LDA 中我们假设所有类别都有相同估计的协方差 ![\Sigma](https://box.kancloud.cn/f88978c5669ed89a23058bcb757af3b8_12x12.jpg) ,所以我们可重新调节数据从而让协方差相同。
![X^* = D^{-1/2}U^t X\text{ with }\Sigma = UDU^t](https://box.kancloud.cn/3733581726b9c12683c4eaff9026a813_261x20.jpg)
在缩放之后对数据点进行分类相当于找到与欧几里得距离中的数据点最接近的估计类别均值。但是它也可以在投影到 ![K-1](https://box.kancloud.cn/471c7446c409c5f0b1e5d6f0c17471eb_47x13.jpg) 个由所有 ![\mu^*_k](https://box.kancloud.cn/2654fc4a47d379db01a4622fe21bade7_18x17.jpg) 个类生成的仿射子空间![H_K](https://box.kancloud.cn/8eacba5fd136b35fb8ee040b51dd4fd7_27x15.jpg) 之后完成。这也表明,LDA 分类器中存在一个利用线性投影到 ![K-1](https://box.kancloud.cn/471c7446c409c5f0b1e5d6f0c17471eb_47x13.jpg) 个维度空间的降维工具。通过投影到线性子空间 ![H_L](https://box.kancloud.cn/97293c078d249da49c86901aaeaeb058_24x15.jpg) 上,我们可以进一步将维数减少到一个选定的 ![L](https://box.kancloud.cn/932e52dfeb15d15287c07f0b899113b1_12x12.jpg) ,从而使投影后的 ![\mu^*_k](https://box.kancloud.cn/2654fc4a47d379db01a4622fe21bade7_18x17.jpg) 的方差最大化(实际上,为了实现转换类均值 ![\mu^*_k](https://box.kancloud.cn/2654fc4a47d379db01a4622fe21bade7_18x17.jpg),我们正在做一种形式的 PCA)。 这里的 ![L](https://box.kancloud.cn/932e52dfeb15d15287c07f0b899113b1_12x12.jpg) 对应于 [`discriminant_analysis.LinearDiscriminantAnalysis.transform`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform") 方法中使用的 `n_components` 参数。 详情参考 [\[3\]](#id7) 。
## 1.2.4. Shrinkage(收缩)
收缩是一种在训练样本数量相比特征而言很小的情况下可以提升的协方差矩阵预测(准确性)的工具。 在这个情况下,经验样本协方差是一个很差的预测器。收缩 LDA 可以通过设置 [`discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis") 类的 `shrinkage` 参数为 ‘auto’ 来实现。
`shrinkage` parameter (收缩参数)的值同样也可以手动被设置为 0-1 之间。特别地,0 值对应着没有收缩(这意味着经验协方差矩阵将会被使用), 而 1 值则对应着完全使用收缩(意味着方差的对角矩阵将被当作协方差矩阵的估计)。设置该参数在两个极端值之间会估计一个(特定的)协方差矩阵的收缩形式
**[![shrinkage](https://box.kancloud.cn/78a5abee9df6446f89cd46b5faa9e251_566x424.jpg)](../auto_examples/classification/plot_lda.html)**
## 1.2.5. 预估算法
默认的 solver 是 ‘svd’。它可以进行classification (分类) 以及 transform (转换),而且它不会依赖于协方差矩阵的计算(结果)。这在特征数量特别大的时候十分具有优势。然而,’svd’ solver 无法与 shrinkage (收缩)同时使用。
‘lsqr’ solver 则是一个高效的算法,它仅用于分类使用。它支持 shrinkage (收缩)。
‘eigen’(特征) solver 是基于 class scatter (类散度)与 class scatter ratio (类内离散率)之间的优化。 它可以被用于 classification (分类)以及 transform (转换),此外它还同时支持收缩。然而,该解决方案需要计算协方差矩阵,因此它可能不适用于具有大量特征的情况。
Examples:
[Normal and Shrinkage Linear Discriminant Analysis for classification](../auto_examples/classification/plot_lda.html#sphx-glr-auto-examples-classification-plot-lda-py): Comparison of LDA classifiers with and without shrinkage.
References:
\[3\]*([1](#id4), [2](#id5))* “The Elements of Statistical Learning”, Hastie T., Tibshirani R., Friedman J., Section 4.3, p.106-119, 2008.\[4\]Ledoit O, Wolf M. Honey, I Shrunk the Sample Covariance Matrix. The Journal of Portfolio Management 30(4), 110-119, 2004.
- scikit-learn 0.19 中文文档
- 用户指南
- 1. 监督学习
- 1.1. 广义线性模型
- 1.2. 线性和二次判别分析
- 1.3. 内核岭回归
- 1.4. 支持向量机
- 1.5. 随机梯度下降
- 1.6. 最近邻
- 1.7. 高斯过程
- 1.8. 交叉分解
- 1.9. 朴素贝叶斯
- 1.10. 决策树
- 1.11. 集成方法
- 1.12. 多类和多标签算法
- 1.13. 特征选择
- 1.14. 半监督学习
- 1.15. 等式回归
- 1.16. 概率校准
- 1.17. 神经网络模型(有监督)
- 2. 无监督学习
- 2.1. 高斯混合模型
- 2.2. 流形学习
- 2.3. 聚类
- 2.4. 双聚类
- 2.5. 分解成分中的信号(矩阵分解问题)
- 2.6. 协方差估计
- 2.7. 经验协方差
- 2.8. 收敛协方差
- 2.9. 稀疏逆协方差
- 2.10. Robust 协方差估计
- 2.11. 新奇和异常值检测
- 2.12. 密度估计
- 2.13. 神经网络模型(无监督)
- 3. 模型选择和评估
- 3.1. 交叉验证:评估估算器的表现
- 3.2. 调整估计器的超参数
- 3.3. 模型评估: 量化预测的质量
- 3.4. 模型持久化
- 3.5. 验证曲线: 绘制分数以评估模型
- 4. 数据集转换
- 4.1. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器
- 4.2. 特征提取
- 4.3. 预处理数据
- 4.4. 无监督降维
- 4.5. 随机投影
- 4.6. 内核近似
- 4.7. 成对的矩阵, 类别和核函数
- 4.8. 预测目标 (y) 的转换
- 5. 数据集加载工具
- 6. 大规模计算的策略: 更大量的数据
- 7. 计算性能
- 教程
- 使用 scikit-learn 介绍机器学习
- 关于科学数据处理的统计学习教程
- 机器学习: scikit-learn 中的设置以及预估对象
- 监督学习:从高维观察预测输出变量
- 模型选择:选择估计量及其参数
- 无监督学习: 寻求数据表示
- 把它们放在一起
- 寻求帮助
- 处理文本数据
- 选择正确的评估器(estimator)
- 外部资源,视频和谈话