线性判别分析(Linear Discriminant Analysis, LDA)是一种统计模式识别方法,用于寻找数据集中的线性组合,以最大化类别之间的差异,同时最小化类别内部的差异

LDA通常用于监督学习场景,例如分类任务,其中已知数据点属于不同的预定义类别,并且目标是 找到能够最好地区分这些类别的低维表示。

LDA的基本公式和参数
目标函数

LDA的目标是找到一个投影矩阵 W,使得投影后的数据在类别间具有最大的方差,在类别内具有最小的方差。这通过最大化下面的比率来实现:

经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集

其中:

  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_概率论_02 表示类间散度矩阵(Between-class scatter matrix),反映了类别间的差异。
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_03 表示类内散度矩阵(Within-class scatter matrix),反映了类别内的差异。
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_概率论_04判别准则函数。
散度矩阵

类内散度矩阵 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_概率论_05 是所有类别内散度矩阵的加权和

经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_样本均值_06
其中,经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集_07 表示第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_08

经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_样本均值_09

经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_10 是第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_08 类的均值向量经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_12 是第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_08 类的样本集合。


经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_14

类间散度矩阵 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_15 描述了各类均值之间的差异:经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集_16
其中

  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集_17 是第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_18 类的样本均值向量
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_19整个数据集的样本均值向量。

样本协方差矩阵的公式是用来估计一组多维数据之间线性相关性的强度和方向的。对于一个由多个随机变量组成的样本数据集,样本协方差矩阵 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集_20

设我们有一个包含 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_样本均值_21 个样本的 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_22-维数据集 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集_23,其中每个样本 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_样本均值_24 是一个 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_22-维向量。

样本均值向量为:
经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_26

样本协方差矩阵 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集_20 定义为:
经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_概率论_28

其中

  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_概率论_29 是第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_18
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_31

矩阵中的每个元素 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集_32 都代表了第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_08 和第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_概率论_34 个变量之间的样本协方差,计算公式为:
经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_35

其中

  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_36经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_37 分别是第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_样本均值_38样本在第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_18 和第 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_40
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_41经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_样本均值_42 则是相应维度的样本平均值。

值得注意的是,分母 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_43 而不是 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_样本均值_21 是为了得到无偏估计,这是因为样本均值 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_45

求解W

要最大化 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_概率论_46需要求解以下广义特征值问题:经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_47
这里的 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_48经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集_49列向量,而 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_50相应的特征值。通常,选择那些具有最大特征值经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_学习_48 作为 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_数据集_49

解释
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_53投影矩阵,用于将原始数据映射到较低维度空间。
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_概率论_02:类间散度矩阵,量化了类别间的差异。
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_机器学习_03:类内散度矩阵,量化了类别内的差异。
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_概率论_56:特征值,决定了投影方向的重要性。
  • 经典子空间学习——线性判别分析(Linear Discriminant Analysis,LDA)_样本均值_57:特征向量,指示了投影的方向。

通过LDA,可以找到一个或多个投影方向,使得数据在这些方向上的投影能最大限度地区分不同的类别,从而提高分类性能。在实际应用中,LDA经常用于降维,以便在保持类别信息的同时减少数据的复杂性。

python代码
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib

matplotlib.use('TkAgg')  # 或者尝试 'Agg'

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用LDA进行特征提取
lda = LinearDiscriminantAnalysis(n_components=2)  # 我们将数据降到2维
X_train_lda = lda.fit_transform(X_train, y_train)
X_test_lda = lda.transform(X_test)

# 利用LDA结果进行分类
# 这里我们直接使用LDA的预测功能
y_pred = lda.predict(X_test)

# 评估模型性能
print("Classification Report:\n", classification_report(y_test, y_pred))
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))

# 可视化LDA结果:
plt.figure()
colors = ['navy', 'turquoise', 'darkorange']
lw = 2

for color, i, target_name in zip(colors, [0, 1, 2], iris.target_names):
    plt.scatter(X_train_lda[y_train == i, 0], X_train_lda[y_train == i, 1], color=color, alpha=.8, lw=lw,
                label=target_name)
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('LDA of IRIS dataset')

plt.show()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.