线性判别分析(LDA)详解

article/2025/11/10 14:18:49

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、LDA简介

二、数学原理(以二分类为例子)

1、设定

2、每一类的均值和方差

3、目标函数

4、目标函数的求解

5、最终的实践所求

三、多分类LDA

四、LDA用途与优缺点

1、用途

2、优点

3、缺点

五、LDA的python应用

1、调用函数LinearDiscriminantAnalysis

2、常用参数意义

3、常用返回值

4、利用LDA进行二分类实例


一、LDA简介

LDA(线性判别分析)是一个经典的二分类算法。

主要思想:以一种基于降维的方式将所有的样本映射到一维坐标轴上,然后设定一个阈值,将样本进行区分

如下图所示,把红蓝两类的点投影在了一条直线(向量a)上,即二维变一维(本来一个点要用(x,y)来表示,投影到直线后就用一个维度来描述)。


二、数学原理(以二分类为例子)

1、设定

首先我们假设整个样本空间分为两个类别,分别是1、-1;N1、N2分别代表1,-1类别样本的个数;样本为X。

那么有:|X_{C1} |=N1|X_{C2} |=N2

设定z为映射后的坐标(即投影后的坐标)

2、每一类的均值和方差

将样本数据X向w向量(设定w的模长为1)做投影,则有:z_{i}= w^{T}x_{i}

接下来求出映射后的均值和方差(用来衡量样本的类间距离和类内距离)

均值:\bar{z_{1}} =\frac{1}{N1} \sum_{i=1}^{N1} w^{T} x_{_{C1}i}\bar{z_{2}} =\frac{1}{N2} \sum_{i=1}^{N2} w^{T} x_{_{C2}i}

方差:S_{z1} =\frac{1}{N1} \sum_{i=1}^{N1}\left(z_{i}-\bar{z1}\right)^{2}S_{z2} =\frac{1}{N2} \sum_{i=1}^{N2}\left(z_{i}-\bar{z2}\right)^{2}

3、目标函数

想要得到好的分类模型,即要求类内间距小,类间间距大。即:

类内间距小:S_{z1}+S_{z2};两个类的方差越小,说明样本越密集
类间间距大:\left(\overline{z_{1}}-\overline{z_{2}}\right)^{2};用两个类的均值的距离说明两个类之间的距离

根据这样的思路构建目标函数:

J(w)=\frac{\left(\overline{z_{1}}-\overline{z_{2}}\right)^{2}}{S_{z 1}+S_{z 2}}

J(w)越大越好,即我们要求的是:\operatorname{argmax}_{w} J(w)

4、目标函数的求解

化简目标函数:(将w向量与原数据的运算分隔开)

J(w)=\frac{\left(\overline{z_{1}}-\overline{z_{2}}\right)^{2}}{S_{z_{1}}+S_{z_{2}}}=\frac{w^{T}\left(\overline{X_{C_{1}}}-\overline{X_{C_{2}}}\right)\left(\overline{X_{C_{1}}}-\overline{X_{C_{2}}}\right)^{T} w}{w^{T}\left(S_{C_{1}}+S_{C_{2}}\right) w}

令类间散度矩阵:S_{b}=\left(\overline{X_{C_{1}}}-\overline{X_{C_{2}}}\right)\left(\overline{X_{C_{1}}}-\overline{X_{C_{2}}}\right)^{T};类内散度矩阵:S_{w}=S_{C_{1}}+S_{C_{2}},则有:

J(w)=\frac{w^{T} S_{b} w}{w^{T} S_{w} w} =w^{T} S_{b} w\left(w^{T} S_{w} w\right)^{-1}

方法一:

为了解决\operatorname{argmax}_{w} J(w),则对J(w)求导:

\frac{\partial J(w)}{\partial w}=2 S_{b} w\left(w^{T} S_{w} w\right)^{-1}+w^{T} S_{b} w(-1)\left(w^{T} S_{w} w\right)^{-2} 2 S_{w} w=0

化简得到:

S_{w} w=\frac{w^{T} S_{w} w}{w^{T} S_{b} w} S_{b} w =\frac{w^{T} S_{w} w}{w^{T} S_{b} w}\left(\left(\overline{X_{C_{1}}}-\overline{X_{C_{2}}}\right)\left(\overline{X_{C_{1}}}-\overline{X_{C_{2}}}\right)^{T}\right) w

又因为w^{T} S_{w} ww^{T} S_{b} w\left(\overline{X_{C_{1}}}-\overline{X_{C_{2}}}\right)^{T} w都是标量,w前面我们已经约定它的模长为1,所以我们不关心它的长度,只关心他的方向,所以把标量都摘掉,得:

w \sim S_{w}^{-1}\left(\overline{X_{C_{1}}}-\overline{X_{C_{2}}}\right)

方法二:

J(w)的分子分母都是关于w的二次项,因此J(w)的解与w的长度无关,只与它的方向有关。所以这里为例简单处理也可以令w^{T}S_{w}w=1,故求min(-w^{T}S_{b}w),利用拉格朗日乘子法可得:

S_{b}w=\lambda S_{w}w

又因为S_{b}w方向恒为\overline{X_{c1}}-\overline{X_{c2}},所以令S_{b}w=\lambda (\overline{X_{c1}}-\overline{X_{c2}}),因此有w \sim S_{w}^{-1}(\overline{X_{c1}}-\overline{X_{c2}})

5、最终的实践所求

为得到数值解的稳定性,通常对S_{w}进行奇异值分解(S_{w}=U\sum V^{T}),再由S_{w}^{-1}=V {\sum}^{-1} U^{T}得到S_{w}^{-1}


三、多分类LDA

假定存在N个类,且第i类示例数为m_{i}

全局散度矩阵:S_{t}=S_{b}+S_{w}=\sum_{i=1}^{m}(\boldsymbol{x}_{i}-\mu )(\boldsymbol{x}_{i}-\mu )^{T},其中\mu是所有样本的均值向量。

类内散度矩阵:S_{w} = \sum_{i=1}^{N}S_{w_{i}}=\sum_{i=1}^{N}\sum_{\boldsymbol{x}\in X_{i}}(\boldsymbol{x}-\mu _{i})(\boldsymbol{x}-\mu _{i})^{T}

类间散度矩阵:S_{b}=S_{t}-S_{w}=\sum_{i=1}^{N}m_{i}(\boldsymbol{\mu }_{i}-\boldsymbol{\mu} )(\boldsymbol{\mu }_{i}-\boldsymbol{\mu})^{T}

然后与上面的二分类类似:目标函数为:

\max _{W} \frac{\operatorname{tr}\left(W^{T} S_{b} W\right)}{\operatorname{tr}\left(W^{\top} S_{w} W\right)}

类似可得:S_{b}W=\lambda S_{w}W

所以W的解为S_{w}^{-1}S_{b}的特征向量组成的矩阵。


四、LDA用途与优缺点

1、用途

LDA既可以用来降维(将W视为投影矩阵),又可以用来分类,但主要还是用于降维。

2、优点

与另一个降维算法PCA对比

(1)在降维过程中可以使用类别的先验知识经验,而PCA(无监督学习)无法使用类别先验知识

(2)LDA样本分类依赖的是均值而不是方差,比PCA算法更优

3、缺点

(1)LDA不适合对非高斯分布的样本降维

(2)LDA降维最多降到类别数N-1的维数,如果我们降维的维度大于N-1,则不能使用LDA

(3)LDA可能会过度拟合数据


五、LDA的python应用

1、调用函数LinearDiscriminantAnalysis

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

2、常用参数意义

(1)solver:字符串类型,指定求解最优化问题的算法

🌳'svd':奇异值分解。对于有大规模特征的数据,推荐用这种算法

🌳'lsqr':最小平方差,可以结合skrinkage参数

🌳'eigen' :特征分解算法,可以结合shrinkage参数

(2)skrinkage:取值:字符串‘auto’或者浮点数或者None。

该参数通常在训练样本数量小于特征数量的场合下使用。

🌳‘auto’:自动决定shrinkage参数的大小

🌳None:不使用shrinkage参数

🌳浮点数(位于0~1之间):自己指定的shrinkage参数

(3)n_components:(整数类型)指定了数组降维后的维度(该值必须小于n_classes-1)

(4)priors:一个数组,数组中的元素依次指定了每个类别的先验概率。如果为None,则认为每个类的先验概率都是等可能的

3、常用返回值

coef_:权重向量

intercept:b值

covariance_:一个数组,依次给出了每个类别的协方差矩阵

means_:一个数组,依次给出了每个类别的均值向量

xbar_:给出了整体样本的均值向量

4、利用LDA进行二分类实例

来个简单的小栗子

我们使用sklearn里的乳腺癌数据集

from sklearn.datasets import load_breast_cancer 
cancer = load_breast_cancer()

然后对数据进行一个处理,让我们看起来舒服点,计算机处理也舒服点

data=cancer["data"]
col = cancer['feature_names']
x = pd.DataFrame(data,columns=col)#就是那些个特征
target = cancer.target.astype(int)
y = pd.DataFrame(target,columns=['target'])#对应特征组合下的类别标签

训练集测试集分分类

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=1)

直接进入训练

clf = LinearDiscriminantAnalysis(n_components=1)
model=clf.fit(x_train,y_train)

训练出来的模型对test集进行一个预测

y_pred = model.predict(x_test)
print(classification_report(y_test, y_pred))

完整代码

from sklearn.datasets import load_breast_cancer 
from sklearn.model_selection import train_test_split
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn import metrics
import matplotlib.pyplot as plt
from sklearn.metrics import classification_report
import pandas as pd
import warnings
warnings.filterwarnings('ignore')cancer = load_breast_cancer()data=cancer["data"]
col = cancer['feature_names']
x = pd.DataFrame(data,columns=col)
target = cancer.target.astype(int)
y = pd.DataFrame(target,columns=['target'])x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=1)
clf = LinearDiscriminantAnalysis(n_components=1)
model=clf.fit(x_train,y_train)y_pred = model.predict(x_test)
print(classification_report(y_test, y_pred))

结果


欢迎大家在评论区批评指正,谢谢~


http://chatgpt.dhexx.cn/article/QWZl7KVY.shtml

相关文章

LDA算法——线性判别

目录 一、前言 二、什么是LDA? 三、LDA原理 1.二分类问题 2.多分类问题 3.几点说明 四、算法实现 一、前言 之前我们已经介绍过PCA算法,这是一种无监督的降维方法,可以将高维数据转化为低维数据处理。然而,PCA总是能适用吗&…

主题模型:LDA原理详解与应用

LDA算法简介: LDA是一种基于贝叶斯思想的无监督的聚类算法,广泛用于文本聚类,文本分析,文本关键词等场景。具体的,算法 的输入是一个文档的集合D{d1, d2, d3, ... , dn},同时还需要主题Topic的类别数量m&a…

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来…

制作属于自己的个人博客-超详细教程

SpringBoot个人博客 一.博客效果预览 博客首页预览 博客详情预览 博客评论区预览 博客底部栏预览 关于页面预览 二.博客效果在线预览 http://blog.ShaoxiongDu.top 三.项目技术 后端SpringBoot框架 分为控制层(Controller) 业务层(Service) 数据持久层(Dao) 按照Spring…

如何搭建个人博客

新的安装方式:(强烈推荐,简单方便) 利用dockernginx配置halo博客 先碎碎念一下,最近在学习springboot项目,在b站跟着up主研究如何写一个简易的博客来着,后来发现可以直接简易的搭建一个博客(都不用写代码&a…

使用 nodejs 搭建个人博客

"使用nodejs搭建自己的个人博客" 说明运行后端 node 模块后端框架采用的是 express 框架进行接口构建,具体解释如下:数据库参数配置评论邮箱提示付费文件下载配置(支付宝)评论语句检测 关于跨域问题的解决 说明 使用no…

超详细图解:如何使用 WordPress搭建一个个人博客?

前两天我用WordPress 给自己搭建了一个网站,整个过程非常的顺利,体验非常地好,于是我就整个过程、以及其中的一些搭建心得,记录下来。 如果你也正好有搭建个人网站的想法,那么本文会给你一个参考,也许看了这…

个人博客网站的设计与实现

/ 前话 / 纯手工敲代码,代码结构简单,divcss布局html静态个人博客首页网页设计,dreamwaver和hb都可以编辑,文件结构包含了css、fonts、images、js和html,运用html5技术,包括nav标签、header标签和footer标签…

个人博客系统毕业设计开题报告

本文给出的是本科生个人博客系统的毕业设计开题报告,仅供参考!(具体模板和要求按照自己学校给的要求) 毕业设计开题报告 一、选题意义二、博客系统概述三 、毕业设计研究方案四、功能结构图五、进度安排六、参考文献 一、选题意义…

基于HTML个人博客网站项目的设计与实现——个人博客作品展示6页 HTML+CSS

Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 个人博客网站 | 个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 | 大学生个人HTML网页设计作品 | HTML期末大学生网页设计作业 HTML:结构 CSS&…

HTML制作个人网页制作(简单静态HTML个人博客网页作品)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

个人主页博客网页设计制作HTML5+CSS大作业——清新春暖花开个人博客网站(6页)

HTML5CSS大作业——清新春暖花开个人博客网站(6页) 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄…

如何使用HTML制作个人网站(如何搭建个人博客)

📂文章目录 一、👨‍🎓网站题目二、✍️网站描述三、📚网站介绍四、🌐网站演示五、⚙️ 网站代码🧱HTML结构代码💒CSS样式代码 六、🥇 如何让学习不再盲目七、🎁更多干货…

10分钟搭建一个免费个人博客网站

一个程序员怎么能不拥有自己的博客,本文让10分钟快速搭建部署好自己的博客 准备工作 有Gitee账号有安装git会 markdown 编写文档Node.js 版本 > 8.6 博客采用VuePress搭建,Gitee部署,接下来,5步搞定。 1.创建项目 创建项目…

用html制作学生个人博客,网页制作论坛(学生个人网页制作代码)

许多开发人员认为擅长设计是一种天生的能力,而创造力是与生俱来的。但是设计是一项可以像其他任何东西一样学习的技能。你不必天生就可以创建一个漂亮的网站的艺术家,这需要实践。在身边的小伙伴的博客,自己的网站来看,很多人都是用了开源后台的网站模板,熟不知局限太大,…

个人网站、个人博客的设计案例,仅供参考

关于网站的内容,我也是纠结了好久,我这里说的是网站建设的内容。个人网站,大多数人还是做个博客,想着能平时写点内容,发点文章,图片,一些简短的分享什么的。 好,想到就做。 我做了…

如何用html制作博客页面,HTML个人博客页面

知识点总结:下面的是一个个人博客页面,歌词的段落用的时“p”标签,超链接为“a”标签。 包括鼠标经过的事件:颜色变换;去顶部去底部和指定位置:写入的锚点,点击后可以到制定位置。 刚开始学习ht…

手把手教你十五分钟搭建个人博客网站

文章目录 一、下载二、上传服务器与配置三、加备案号四、关闭所有评论五、删除自豪采用wordpress六、优雅主题配置七、安装md编译器八、自定义站点九、发一篇博客 一、下载 https://cn.wordpress.org/download/下载一个就行: 二、上传服务器与配置 解压&#xff…

HTML+CSS大作业: 个人介绍网页制作作业 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人博客网站制作成品下载

HTML5期末大作业:个人介绍网站设计——个人博客(6页) HTMLCSSJavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、…

个人博客网站建设详细版

前言:在讲个人博客,我要向机灵鹤大佬致以最高的敬意!感谢他提出的技术指导,本章我将以我犯的错误一步步讲述。 1. 购买服务器 我是在阿里购买的服务器,因为我是一名学生的原因我通过认证学生身份参加了阿里云高校计划…