判别分析:原理推导、方法对比与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)是计算机科学与人工智能领域的一个重要分支,旨在让计算机理解、处理和生成人类自然语言,实现人与计算机之间用自然语言进行有效通信。特点 交叉性:涉及计算机科学、语言学…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
