线性判别分析与二次判别分析 - LDA 与 QDA
概述
线性判别分析 (LDA) 和二次判别分析 (QDA) 是两种经典的分类器,它们的主要区别在于所采用的决策面类型:
- LDA 采用线性决策面。
- QDA 采用二次决策面。
这些分类器受到青睐的原因有以下几点:
- 它们提供闭式解,计算效率高。
- 它们本质上支持多类别分类。
- 它们不需要超参数调优。
决策边界
- LDA 仅限于线性边界。
- QDA 凭借其二次边界,提供更大的灵活性,能够适应更复杂的模式。
LDA 的降维应用
LDA 也用于监督式降维,通过将输入数据投影到线性子空间上。这个子空间由最大化不同类别间分离度的方向定义。主要特点包括:
- 降维效果显著,将维度降 至小于类别数量。
- 该方法在多类别背景下最有效。
- LDA 中的
n_components参数指定目标维度,但不影响拟合和预测过程。
数学公式
LDA 和 QDA 的一般公式
两种分类器都源于概率模型,假设类别条件分布是高斯分布:
其中 是特征数量, 是类别 的均值, 是类别 的协方差矩阵。
QDA 的特点
- QDA 允许每个类别拥有自己的协方差矩阵 ,从而产生一个更灵活的分类器,能够建模更复杂的边界。
- 如果协方差矩阵是对角矩阵,QDA 简化为高斯朴素贝叶斯分类器。
LDA 的特点
- LDA 假设所有类别共享一个协方差矩阵 ,将模型简化为:
- LDA 有效地测量类别均值之间的马哈拉诺比斯距离,并根据最短距离进行分类。
收缩与协方差估计
收缩用于改进协方差矩阵估计,当特征数量远大于样本数量时尤其有用。主要实现方式包括:
- 自动收缩 (
shrinkage='auto'),它利用 Ledoit 和 Wolf 引理来确定最优收缩度。 - 手动设置收缩参数,范围介于完全依赖经验协方差矩阵(
shrinkage=0)与方差的对角矩阵(shrinkage=1)之间。
估计算法
- SVD 求解器:LDA 的默认求解器,不直接计算协方差,适用于特征数量较大的情况。
- LSQR 求解器:通过求解线性方程来计算系数,支持收缩和自定义协方差估计器。
- 特征值求解器:优化类间散布与类内散布的比率,并支持收缩。
# 从 scikit-learn 导入必要的类
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis
# 使用收缩功能初始化线性判别分析
lda = LinearDiscriminantAnalysis(solver='lsqr', shrinkage='auto')
# 初始化二次判别分析
qda = QuadraticDiscriminantAnalysis()
# 假设 X_train, y_train 为训练数据和标签;X_test 为测试数据
# 拟合模型
lda.fit(X_train, y_train)
qda.fit(X_train, y_train)
# 在测试数据上进行预测
lda_predictions = lda.predict(X_test)
qda_predictions = qda.predict(X_test)
# 使用 LDA 进行降维
# 设置 LDA 的组件数量
lda_for_reduction = LinearDiscriminantAnalysis(n_components=2)
lda_for_reduction.fit(X_train, y_train)
# 将训练数据转换到较低维度
X_train_reduced = lda_for_reduction.transform(X_train)