降维算法之LDA(线性判别分析)

线性判别分析(Linear Discriminant Analysis, LDA)算法详解

先说理解:

线性判别分析(LDA,Linear Discriminant Analysis)是一种用来分类和降维的方法,通俗来说,它就像是一个“分组大师”,帮你在数据里找到一条线(或平面),把不同类别的人或东西清楚地分开。相比主成分分析(PCA)更注重“抓住数据的主要变化”,LDA 的目标是“让不同组别分开得越清楚越好”。

让我用一个生活化的例子来解释:

场景:水果摊分类

假设你在水果摊上卖苹果和橙子,顾客拿来一堆水果让你分清楚哪些是苹果,哪些是橙子。你可能会看几个特征:大小、颜色、重量。但这些特征混在一起不好直接判断。LDA 就像你的大脑在想:“我能不能找一个最聪明的办法,用一条线把苹果和橙子分开?”

  1. 找区别:LDA 先看看苹果和橙子的特征有什么不一样。比如,苹果普遍偏红、稍重,橙子偏橙黄、稍轻。它会找一个“方向”,在这个方向上,苹果和橙子的差异最大。
  2. 挤在一起:同时,LDA 还希望同一类水果(比如所有苹果)在一条线上尽量靠得近一点,别太分散。
  3. 画条线:最后,LDA 会算出一条“分界线”,让苹果和橙子在这条线上被清楚分开。你只要把水果往这条线上一放,就能知道它是苹果还是橙子。

和 PCA 的区别

  • PCA 像是在整理东西,关心“哪些特征变化最大”,不管这些东西是苹果还是橙子。
  • LDA 更像是在分组,关心“怎么让苹果和橙子分得最清楚”。

举个例子

假如你有两组学生的数据:一组是“学霸”,一组是“运动达人”。每个学生有身高、体重、成绩、跑步速度这些特征。

  • PCA 可能会说:“身高和体重变化最大,我用‘体型’来概括你们。”
  • LDA 会说:“我想分开学霸和运动达人,发现‘成绩和跑步速度’的组合能最好地区分这两组,我用这个来画条线。”

生活中的意义

LDA 就像你在朋友圈里分组:有人爱吃,有人爱玩,有人爱学习。你想把他们分得清清楚楚,LDA 就帮你找到一个“最佳分组方式”,比如用“爱吃指数”和“爱玩指数”把人分开。

简单来说,LDA 就是:放大组间差异,缩小组内分散,帮你把东西分得清清楚楚!

1. LDA的基本概念

线性判别分析(LDA)是一种监督学习的降维方法,主要用于分类任务。与主成分分析(PCA)不同,PCA关注的是数据的方差,而LDA关注的是类别可分性

核心目标

  • 寻找一个最佳投影方向,使得不同类别的样本尽可能分开,而同一类别的样本尽可能聚集。
  • 通过计算类内散度和类间散度,最大化类间方差与类内方差的比值。

2. LDA的数学原理

设数据集包含 m m m 个样本,每个样本有 n n n 维特征,即数据矩阵为:
X = [ x 1 , x 2 , . . . , x m ] x i ∈ R n X = [x_1, x_2, ..., x_m] \quad x_i \in \mathbb{R}^n X=[x1,x2,...,xm]xiRn
其中,每个样本 x i x_i xi 具有一个类别标签 y i y_i yi。设数据集有 c c c 个类别,LDA 主要步骤如下:

2.1 计算各类别的均值向量

对每个类别 k k k,计算其均值向量:
μ k = 1 N k ∑ x i ∈ C k x i \mu_k = \frac{1}{N_k} \sum_{x_i \in C_k} x_i μk=Nk1xiCkxi
其中, N k N_k Nk 表示类别 k k k 的样本数, C k C_k Ck 表示类别 k k k 的样本集合。

2.2 计算类内散度矩阵(Within-Class Scatter Matrix)

S W = ∑ k = 1 c S k S_W = \sum_{k=1}^{c} S_k SW=k=1cSk

其中,每个类别 k k k 的散度矩阵:
S k = ∑ x i ∈ C k ( x i − μ k ) ( x i − μ k ) T S_k = \sum_{x_i \in C_k} (x_i - \mu_k)(x_i - \mu_k)^T Sk=xiCk(xiμk)(xiμk)T

2.3 计算类间散度矩阵(Between-Class Scatter Matrix)

S B = ∑ k = 1 c N k ( μ k − μ ) ( μ k − μ ) T S_B = \sum_{k=1}^{c} N_k (\mu_k - \mu)(\mu_k - \mu)^T SB=k=1cNk(μkμ)(μkμ)T

其中, μ \mu μ 是所有样本的全局均值:
μ = 1 m ∑ i = 1 m x i \mu = \frac{1}{m} \sum_{i=1}^{m} x_i μ=m1i=1mxi

2.4 计算最佳投影方向

LDA的目标是找到一个变换矩阵 W W W,使得投影后的类间散度尽可能大,而类内散度尽可能小。数学上,该目标可以表示为最大化广义瑞利商
J ( W ) = ∣ W T S B W ∣ ∣ W T S W W ∣ J(W) = \frac{|W^T S_B W|}{|W^T S_W W|} J(W)=WTSWWWTSBW

2.5 求解最优解

  • 通过特征值分解奇异值分解(SVD),解出 S W − 1 S B S_W^{-1} S_B SW1SB 的前 k k k 个最大特征值对应的特征向量,构成变换矩阵 W W W

  • 将数据 X X X 投影到新空间:
    X new = X W X_{\text{new}} = X W Xnew=XW


3. LDA的Python实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# 示例数据
X = np.array([[2, 3], [3, 4], [4, 5], [8, 9], [9, 10], [10, 11]])
y = np.array([0, 0, 0, 1, 1, 1])

# 训练LDA模型并降维到1维
lda = LinearDiscriminantAnalysis(n_components=1)
X_lda = lda.fit_transform(X, y)

print("投影后的数据:\n", X_lda)

4. LDA的应用场景

  1. 人脸识别:如 Fisherfaces 方法,将高维图像数据降维并分类。
  2. 文本分类:降维后提高文本分类模型的性能。
  3. 医学诊断:用于区分不同病理类别。

5. 总结

  • LDA 是一种监督学习的降维方法,用于提高分类效果。
  • PCA 关注方差,LDA 关注类别可分性
  • 核心是最大化类间散度与类内散度之比,找到最优投影方向。
  • 适用于模式识别、医学诊断、文本分类等任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值