判别分析:原理推导、方法对比与Matlab实战
内容摘要
本文深入解析判别分析的三大核心方法——距离判别、Fisher判别与Bayes判别,结合协方差估计、投影优化及贝叶斯决策理论,系统阐述数学原理与实现细节。通过气象数据春早预测、产品厂家分类及城市竞争力评估三大实战案例,完整演示数据标准化、判别函数构建、分类规则设计及模型验证流程。
关键词:判别分析 马氏距离 Fisher投影 Bayes决策 Matlab分类 协方差估计 关键词:判别分析 马氏距离 Fisher投影 Bayes决策 Matlab分类 协方差估计
1. 判别分析核心概念
判别分析旨在通过统计模型将样本划分到已知类别中,其核心步骤包括:
- 特征标准化:消除量纲差异,如Z-score标准化。
- 判别函数构建:基于距离、投影或概率构建分类规则。
- 分类决策:根据阈值判定样本归属类别。
2. 距离判别法详解
2.1 马氏距离的数学本质
马氏距离通过协方差矩阵修正欧氏距离,反映数据分布结构:
d ( x , A ) = ( x − μ ) T Σ − 1 ( x − μ ) d(x, A) = \sqrt{(x - \mu)^T \Sigma^{-1} (x - \mu)} d(x,A)=(x−μ)TΣ−1(x−μ)
优势:考虑变量相关性,适用于非球形分布数据。
2.2 协方差相同与不同的分类策略
(1) 协方差相同
- 判别函数:
w ( x ) = ( x − μ ˉ ) T Σ − 1 ( μ 1 − μ 2 ) w(x) = (x - \bar{\mu})^T \Sigma^{-1} (\mu_1 - \mu_2) w(x)=(x−μˉ)TΣ−1(μ1−μ2) - 分类规则:
x ∈ { A , w ( x ) ≥ 0 B , w ( x ) < 0 x \in \begin{cases} A, & w(x) \geq 0 \\ B, & w(x) < 0 \end{cases} x∈{A,B,w(x)≥0w(x)<0
(2) 协方差不同
- 判别函数:
w ( x ) = ( x − μ 2 ) T Σ 2 − 1 ( x − μ 2 ) − ( x − μ 1 ) T Σ 1 − 1 ( x − μ 1 ) w(x) = (x - \mu_2)^T \Sigma_2^{-1}(x - \mu_2) - (x - \mu_1)^T \Sigma_1^{-1}(x - \mu_1) w(x)=(x−μ2)TΣ2−1(x−μ2)−(x−μ1)TΣ1−1(x−μ1) - 分类规则:直接比较马氏距离,选择较小者。
Matlab代码实现:
% 协方差不同时的距离判别
mu1 = mean(class1_data); mu2 = mean(class2_data);
sigma1 = cov(class1_data); sigma2 = cov(class2_data);
d1 = (x_test - mu1) * inv(sigma1) * (x_test - mu1)';
d2 = (x_test - mu2) * inv(sigma2) * (x_test - mu2)';
if d1 < d2disp('属于类别A');
elsedisp('属于类别B');
end
3. Fisher判别法深度解析
3.1 投影方向优化
Fisher准则最大化类间散度与类内散度之比:
J ( a ) = a T S B a a T S W a J(a) = \frac{a^T S_B a}{a^T S_W a} J(a)=aTSWaaTSBa
其中:
- S B = ( μ 1 − μ 2 ) ( μ 1 − μ 2 ) T S_B = (\mu_1 - \mu_2)(\mu_1 - \mu_2)^T SB=(μ1−μ2)(μ1−μ2)T 为类间散度矩阵
- S W = Σ 1 + Σ 2 S_W = \Sigma_1 + \Sigma_2 SW=Σ1+Σ2 为类内散度矩阵
最优解: a = S W − 1 ( μ 1 − μ 2 ) a = S_W^{-1} (\mu_1 - \mu_2) a=SW−1(μ1−μ2)
3.2 多类别扩展
对 K K K类问题,投影矩阵 A A A由前 K − 1 K-1 K−1个最大特征值对应的特征向量组成。
Matlab代码实现:
% Fisher判别多分类
[coeff, score, latent] = pca(X); % PCA降维
ldaModel = fitcdiscr(X, Y, 'DiscrimType', 'linear');
predicted = predict(ldaModel, X_test);
4. Bayes判别法与风险最小化
4.1 贝叶斯决策理论
- 先验概率: p 1 , p 2 p_1, p_2 p1,p2 表示各类别出现概率。
- 误判损失: L ( 1 ∣ 2 ) L(1|2) L(1∣2) 表示将类别2误判为1的损失。
- 后验概率: P ( Y = k ∣ X = x ) ∝ f k ( x ) p k P(Y=k | X=x) \propto f_k(x) p_k P(Y=k∣X=x)∝fk(x)pk
4.2 判别函数与阈值
- 判别函数:
W ( x ) = ln f 1 ( x ) f 2 ( x ) + ln p 1 L ( 2 ∣ 1 ) p 2 L ( 1 ∣ 2 ) W(x) = \ln \frac{f_1(x)}{f_2(x)} + \ln \frac{p_1 L(2|1)}{p_2 L(1|2)} W(x)=lnf2(x)f1(x)+lnp2L(1∣2)p1L(2∣1) - 分类规则:
x ∈ { Y = 1 , W ( x ) ≥ 0 Y = 2 , W ( x ) < 0 x \in \begin{cases} Y=1, & W(x) \geq 0 \\ Y=2, & W(x) < 0 \end{cases} x∈{Y=1,Y=2,W(x)≥0W(x)<0
Matlab代码实现:
% Bayes判别(正态分布假设)
mu1 = mean(train1); mu2 = mean(train2);
sigma = cov([train1; train2]); % 假设协方差相同
prior = [0.3, 0.7]; % 先验概率
loss_matrix = [0, 1; 2, 0]; % 误判损失矩阵
bayesModel = fitcnb(train_data, train_label, 'Prior', prior, 'Cost', loss_matrix);
predicted = predict(bayesModel, test_data);
5. 综合案例实战
5.1 气象数据春早预测
数据与问题
- 指标: x 1 x_1 x1(综合因子1), x 2 x_2 x2(综合因子2)
- 类别:6个春旱年 vs 8个非春旱年
Matlab实现步骤
- 数据标准化:
data = zscore([a; b]); % a为春旱数据,b为非春旱数据
- 计算均值与协方差:
mu1 = mean(a); mu2 = mean(b); sigma = ((n1-1)*cov(a) + (n2-1)*cov(b)) / (n1 + n2 - 2);
- 构建判别函数:
W ( x ) = 2.0893 x 1 − 3.3165 x 2 − 55.4331 W(x) = 2.0893x_1 - 3.3165x_2 - 55.4331 W(x)=2.0893x1−3.3165x2−55.4331 - 分类验证:
[predicted, error] = classify(test_data, [a; b], labels, 'linear'); fprintf('误判率:%.2f%%\n', error*100);
结果分析
- 历史数据拟合率:93%(仅1个样本误判)
- 新样本预测:输入 ( 23.5 , − 1.9 ) (23.5, -1.9) (23.5,−1.9),输出“春旱”。
5.2 产品厂家分类(经济类型判别)
数据与问题
- 指标:式样、包装、耐久性评分
- 类别:7家畅销品(1类) vs 5家滞销品(2类)
- 新样本:3家新厂家的评分数据
Matlab实现步骤
- 数据加载与分组:
train = [9 8 7; 7 6 6; ... ]; % 12x3矩阵 labels = [ones(7,1); 2*ones(5,1)];
- 多方法分类对比:
% 马氏距离分类 [result1, err1] = classify(sample, train, labels, 'mahalanobis'); % Fisher线性分类 [result2, err2] = classify(sample, train, labels, 'linear'); % 二次Bayes分类 [result3, err3] = classify(sample, train, labels, 'quadratic');
- 结果输出:
厂家1: 类别1(畅销) 厂家2: 类别1(畅销) 厂家3: 类别2(滞销)
5.3 城市竞争力与基础设施关联分析
数据与问题
- 竞争力指标:劳动生产率、市场占有率等
- 基础设施指标:交通、通讯、文化设施等
- 目标:通过典型相关分析挖掘两组变量关联
关键步骤
- 典型相关系数计算:
[A, B, r] = canoncorr(X, Y); % X为竞争力数据,Y为基础设施数据
- 显著性检验:
[~, pval] = corrcoef([U, V]); % U和V为典型变量
- 经济解释:
- 第一典型变量:市场占有率与交通设施高度相关( r = 0.92 r=0.92 r=0.92)
- 第二典型变量:居民收入与卫生设施负相关( r = − 0.68 r=-0.68 r=−0.68)
6. 总结与讨论
-
方法对比
方法 假设条件 适用场景 距离判别 协方差相同 小样本、线性分类 Fisher判别 无分布假设 高维数据降维 Bayes判别 已知先验概率与损失矩阵 风险敏感决策 -
实战建议
- 数据预处理:标准化、异常值处理(如3σ原则)
- 模型验证:交叉验证、ROC曲线评估
- 多方法融合:Bagging或Stacking提升鲁棒性
相关文章:
判别分析:原理推导、方法对比与Matlab实战
内容摘要 本文深入解析判别分析的三大核心方法——距离判别、Fisher判别与Bayes判别,结合协方差估计、投影优化及贝叶斯决策理论,系统阐述数学原理与实现细节。通过气象数据春早预测、产品厂家分类及城市竞争力评估三大实战案例,完整演示数据…...
PMP项目管理—整合管理篇—4.管理项目知识
文章目录 基本信息知识的分类显性知识隐性知识 如何分享知识?4W1HITTO输入工具与技术输出 经验教训登记册 基本信息 知识管理指管理显性知识和隐性知识,旨在重复使用现有知识并生成新知识。有助于达成这两个目的的关键活动是知识分享和知识集成…...
Makefile编写和相关语法规则
makefile基本概念 Makefile 本质上是一个文本文件,它包含了一系列规则和指令,用于告诉构建工具(如 make)如何编译和链接程序,以及如何处理项目中的各种文件。其核心思想是通过定义目标(target)…...

点云 PCL 滤波在自动驾驶的用途。
1.直通滤波 2.体素滤波...

NL2SQL的应用-长上下文模型在处理NL2SQL任务时,相较于传统模型,有哪些显著的优势
大家好,我是微学AI,今天给大家介绍一下NL2SQL的应用-长上下文模型在处理NL2SQL任务时,相较于传统模型,有哪些显著的优势。NL2SQL(自然语言转SQL)技术旨在将用户自然语言提问自动转换为结构化查询语句&#…...

图像处理基础(8):图像的灰度直方图、直方图均衡化、直方图规定化(匹配)
本文主要介绍了灰度直方图相关的处理,包括以下几个方面的内容: • 利用OpenCV计算图像的灰度直方图,并绘制直方图曲线 • 直方图均衡化的原理及实现 • 直方图规定化(匹配)的原理及实现 图像的灰度直方图 一…...
探寻数组中两个不重复数字的奥秘:C 语言实战之旅
在编程的世界里,经常会遇到各种各样有趣的问题,今天我们就来探讨一个经典的题目:在一个整数数组中,除了两个数字只出现一次,其余数字都出现了两次,如何高效地找出这两个只出现一次的数字呢?我们…...

Mercury、LLaDA 扩散大语言模型
LLaDA 参考: https://github.com/ML-GSAI/LLaDA https://ml-gsai.github.io/LLaDA-demo/ 在线demo: https://huggingface.co/spaces/multimodalart/LLaDA Mercury 在线demo: https://chat.inceptionlabs.ai/ 速度很快生成...

【ESP32S3接入讯飞在线语音识别】
视频地址: 【ESP32S3接入讯飞在线语音识别】 1. 前言 使用Seeed XIAO ESP32S3 Sense开发板接入讯飞实现在线语音识别。自带麦克风模块用做语音输入,通过串口发送字符“1”来控制数据的采集和上传。 语音识别对比 平台api教程评分百度...
深入了解 SSH 及其相关协议
深入了解 SSH 及其相关协议 在网络通信的世界里,安全始终是至关重要的话题。SSH(Secure Shell)作为一种广泛应用的网络协议,为我们在不安全的网络环境中提供了安全的远程连接和数据传输方式。今天,就让我们一起来深入…...

微信小程序源码逆向 MacOS
前言 日常工作中经常会遇到对小程序的渗透测试,微信小程序的源码是保存在用户客户端本地,在渗透的过程中我们需要提取小程序的源码进行问题分析,本篇介绍如何在苹果电脑 MacOS 系统上提取微信小程序的源码。 0x01 微信小程序提取 在苹果电…...

【我的 PWN 学习手札】House of Husk
House of Husk House of Husk是利用格式化输出函数如printf、vprintf在打印输出时,会解析格式化字符如%x、%lld从而调用不同的格式化打印方法(函数)。同时C语言还提供了注册自定义格式化字符的方法。注册自定义格式化字符串输出方法…...

(八)趣学设计模式 之 装饰器模式!
目录 一、 啥是装饰器模式?二、 为什么要用装饰器模式?三、 装饰器模式的实现方式四、 装饰器模式的优缺点五、 装饰器模式的应用场景六、 装饰器模式 vs 代理模式七、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢…...
设计后端返回给前端的返回体
目录 1、为什么要设计返回体? 2、返回体包含哪些内容(如何设计)? 举例 3、总结 1、为什么要设计返回体? 在设计后端返回给前端的返回体时,通常需要遵循一定的规范,以确保前后端交互的清晰性…...

Element Plus中el-select选择器的下拉选项列表的样式设置
el-select选择器,默认样式效果: 通过 * { margin: 0; padding: 0; } 去掉内外边距后的样式效果(样式变丑了): 通过 popper-class 自定义类名修改下拉选项列表样式 el-select 标签设置 popper-class"custom-se…...

C高级(shell)
作业 1、使用case...in实现等级判断 2、计算各个位数和 3、计算家目录下目录个数和普通文件数 4、打印图形 5、冒泡排序...

子宫腺肌症是如果引起的?
子宫腺肌症是一种常见的妇科疾病,它是指子宫内膜的腺体和间质侵入子宫肌层形成的一种病症。那么,子宫腺肌症是如何引起的呢? 一、病因分析 子宫腺肌症的确切病因目前尚不十分清楚,但经过医学研究和临床观察,认为其发…...

网络安全学习中,web渗透的测试流程是怎样的?
渗透测试是什么?网络安全学习中,web渗透的测试流程是怎样的? 渗透测试就是利用我们所掌握的渗透知识,对网站进行一步一步的渗透,发现其中存在的漏洞和隐藏的风险,然后撰写一篇测试报告,提供给我…...
【软考】【2025年系统分析师拿证之路】【啃书】第十四章 软件实现与测试(十五)
目录 程序设计方法代码重用软件测试软件测试的对象和目的软件测试方法按照被测程序是否可见分类按照是否需要执行被测试程序分类自动测试 测试类型按测试对象划分按测试阶段划分按被测试软件划分其他分类 程序设计方法 结构化程序设计:自顶向下,逐步求精…...
自然语言处理NLP深探
1. NLP 的定义、特点、具体工作、历史和流派 定义:自然语言处理(Natural Language Processing,NLP)是计算机科学与人工智能领域的一个重要分支,旨在让计算机理解、处理和生成人类自然语言,实现人与计算机之间用自然语言进行有效通信。特点 交叉性:涉及计算机科学、语言学…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...