【机器学习】监督学习算法之: 线性判别分析(LDA)

线性判别分析

1、引言

小屌丝 :鱼哥,啥是LDA
小鱼 :LDA,我无法回答
小屌丝 :为啥这么说?
小鱼 :你也不说什么缩写,我怎么说?
小屌丝 :就是 L-D-A 啊
小鱼 :... 我来问吧,你说的是线性判别分析,还是 潜在狄利克雷分配
小屌丝 :额... 这个... 我还真不知道唉
小鱼 :... 你是想了解 监督学习 还是 文本主题生成模型
小屌丝 :额... 先了解 监督学习的LDA吧,文本主题生成模型可以稍后雪.

小鱼 :你别再说了
小屌丝 : 为啥?
小鱼 :我这是给自己挖坑啊。
小屌丝 :为啥?
小鱼 :你还能说点别的吗?
小屌丝 :这个可以啊,但是为啥?
小鱼 : ... 算了算了, 忍住忍住,不生气,不生气。
小屌丝 :为啥?

小鱼 :我还是悄悄写一点 线性判别分析(LDA)吧
小屌丝:嗯嗯,这个可以。

2、线性判别分析

2.1 定义

LDA是一种监督学习的降维技术,其目标是找到一种投影方式,使得同类样本的投影点尽可能接近,而异类样本的投影点尽可能远离。

通过降低数据的维度,LDA能够在保留数据主要特征的同时,减少计算复杂度,提高分类性能。

2.2 原理

LDA的原理基于样本的类别信息,通过最大化类间差异和最小化类内差异来找到最佳的投影方向。

具体而言,LDA试图找到一个投影方向,使得投影后同类样本的方差最小(即类内距离最小),而不同类样本的均值差异最大(即类间距离最大)。

这样,投影后的数据在保持类别信息的同时,实现了数据的降维和简化。

2.3 算法公式

LDA的算法公式主要涉及

  • 计算类内离散度矩阵Sw
  • 类间离散度矩阵Sb
  • 投影方向向量W

通过最大化Fisher准则函数J(W),即最大化类间距离与类内距离的比值,来求解投影方向W。具体公式如下:

  • 类内离散度矩阵Sw :表示同类样本之间的离散程度,计算公式为 S w = Σ i Σ x ∈ X i ( x − m i ) ′ ( x − m i ) Sw = Σi Σx∈Xi (x-mi)'(x-mi) Sw=ΣiΣx∈Xi(x−mi)′(x−mi),其中 X i Xi Xi表示第 i i i类样本的集合, m i mi mi表示第i类样本的均值。
  • 类间离散度矩阵Sb :表示不同类样本之间的离散程度,计算公式为 S b = Σ i N i ( m i − m ) ′ ( m i − m ) Sb = Σi Ni(mi-m)'(mi-m) Sb=ΣiNi(mi−m)′(mi−m),其中 N i Ni Ni表示第 i i i类样本的数量, m m m表示所有样本的均值。
  • Fisher准则函数J(W) :定义为 J ( W ) = ( W ′ S b W ) / ( W ′ S w W ) J(W) = (W'SbW) / (W'SwW) J(W)=(W′SbW)/(W′SwW),其中W为投影方向向量。LDA的目标就是求解使 J ( W ) J(W) J(W)最大化的 W W W。

2.4 代码示例

代码实战

python 复制代码
# -*- coding:utf-8 -*-
# @Time   : 2024-03-21
# @Author : Carl_DJ

'''
实现功能:
    使用sklearn库中的LDA实现LDA分类器

'''
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA  
from sklearn.datasets import load_iris  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import accuracy_score  
  
# 加载鸢尾花数据集  
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 = LDA(n_components=2)  
  
# 训练LDA分类器  
lda.fit(X_train, y_train)  
  
# 使用LDA分类器进行预测  
y_pred = lda.predict(X_test)  
  
# 计算预测准确率  
accuracy = accuracy_score(y_test, y_pred)  
print(f"Accuracy: {accuracy:.2f}")

解析

  • 首先加载了鸢尾花数据集,并将其划分为训练集和测试集。
  • 然后,创建了一个LDA分类器,并使用训练集对其进行训练。
  • 最后,我们使用测试集对LDA分类器进行评估,并输出预测准确率。

3、总结

LDA作为一种经典的线性学习方法,在深度学习中具有广泛的应用。

它通过最大化类间差异和最小化类内差异,实现了数据的降维和简化,提高了分类性能。

LDA不仅适用于传统的机器学习问题,还可以与深度学习模型相结合,增强模型的分类能力。

通过深入理解LDA的原理和算法公式,我们可以更好地应用这一强大算法来解决实际问题。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼 ,学习机器学习领域的知识。

相关推荐
_BugMan1 小时前
【大模型】理论基础(1):函数与神经网络
人工智能·深度学习·神经网络
AI模块工坊2 小时前
CVPR 即插即用 | PConv:重新定义高效卷积,一个让模型“跑”得更快、更省的新范式
人工智能·深度学习·计算机视觉·transformer
驭风少年君2 小时前
《搭建属于自己的网站之网页前端学习》基础入门
前端·学习
lzjava20243 小时前
Spring AI加DeepSeek实现一个Prompt聊天机器人
人工智能·spring·prompt
fanstuck4 小时前
AI辅助数学建模有哪些优势?
人工智能·数学建模·语言模型·aigc
CIb0la4 小时前
能保持精神专注的爱好能给生活带来种种积极的转变
运维·学习·生活
一只安4 小时前
从零开发AI(不依赖任何模型)
人工智能·python
11年老程序猿在线搬砖5 小时前
如何搭建自己的量化交易平台
大数据·人工智能·python·自动交易·量化交易系统
Elastic 中国社区官方博客5 小时前
Elasticsearch 开放推理 API 增加了对 Google 的 Gemini 模型的支持
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·googlecloud
周杰伦_Jay5 小时前
【实战|旅游知识问答RAG系统全链路解析】从配置到落地(附真实日志数据)
大数据·人工智能·分布式·机器学习·架构·旅游·1024程序员节