判别分析:原理推导、方法对比与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)是计算机科学与人工智能领域的一个重要分支,旨在让计算机理解、处理和生成人类自然语言,实现人与计算机之间用自然语言进行有效通信。特点 交叉性:涉及计算机科学、语言学…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
