分类模型:MATLAB判别分析

1. 判别分析简介

  判别分析(Discriminant Analysis) 是一种统计方法,用于在已知分类的样本中构建分类器,并根据特征变量对未知类别的样本进行分类。常见的判别分析方法包括线性判别分析(Linear Discriminant Analysis, LDA)二次判别分析(Quadratic Discriminant Analysis, QDA)

2. 判别分析原理

2.1 线性判别分析(LDA)

  • 线性判别分析假设每个类别的数据在特征空间中服从高斯分布,并且各类别共享相同的协方差矩阵。
  • 目标是找到一个投影方向,使得投影后不同类别的样本在该方向上的投影值具有最大的可分性。
  • 判别函数为线性函数: δ k ( x ) = x T Σ − 1 μ k − 1 2 μ k T Σ − 1 μ k + log ⁡ ( π k ) \delta_k(x) = x^T \Sigma^{-1} \mu_k - \frac{1}{2} \mu_k^T \Sigma^{-1} \mu_k + \log(\pi_k) δk(x)=xTΣ1μk21μkTΣ1μk+log(πk) ,其中 μ k \mu_k μk 是第 k k k 类的均值向量, Σ \Sigma Σ 是协方差矩阵, π k \pi_k πk 是第 k k k 类的先验概率。
  1. 二次判别分析(QDA)
    • 二次判别分析不假设各类别的协方差矩阵相同,因此判别函数为二次函数。
    • 判别函数为: δ k ( x ) = − 1 2 log ⁡ ∣ Σ k ∣ − 1 2 ( x − μ k ) T Σ k − 1 ( x − μ k ) + log ⁡ ( π k ) \delta_k(x) = -\frac{1}{2} \log|\Sigma_k| - \frac{1}{2} (x - \mu_k)^T \Sigma_k^{-1} (x - \mu_k) + \log(\pi_k) δk(x)=21logΣk21(xμk)TΣk1(xμk)+log(πk),其中 Σ k \Sigma_k Σk 是第 k k k 类的协方差矩阵。

3. 案例分析

3.1 数据集介绍

我们将生成一个包含两个类别(Class 1 和 Class 2)的数据集,每个类别各有50个样本。每个样本包含两个特征(Feature 1 和 Feature 2)。

3.2 数据生成

我们使用mvnrnd函数生成多元正态分布的随机数,可以通过调整mu和sigmal来改变数据的混乱程度。

% 生成数据
rng(1); % 设置随机种子以保证可重复性

% 类别1的数据
mu1 = [2, 3];
sigma1 = [2, 1.5; 1.5, 2];
data1 = mvnrnd(mu1, sigma1, 50);

% 类别2的数据
mu2 = [5, 6];
sigma2 = [2, -1.5; -1.5, 2];
data2 = mvnrnd(mu2, sigma2, 50);

% 合并数据
data = [data1; data2];
labels = [ones(50, 1); ones(50, 1) * 2];

% 可视化数据
figure;
scatter(data1(:,1), data1(:,2), 'r', 'filled');
hold on;
scatter(data2(:,1), data2(:,2), 'b', 'filled');
xlabel('Feature 1');
ylabel('Feature 2');
legend('Class 1', 'Class 2');
title('Generated Data for Discriminant Analysis');
hold off;

生成数据以后,绘制数据的散点图如下:

3.3 线性判别分析模型

我们将使用线性判别分析(LDA)对数据进行分类:

% 打乱数据
randIndex = randperm(length(labels));
data = data(randIndex, :);
labels = labels(randIndex, :);

% 拆分训练集和测试集
cv = cvpartition(labels, 'HoldOut', 0.3);
trainData = data(training(cv), :);
trainLabels = labels(training(cv));
testData = data(test(cv), :);
testLabels = labels(test(cv));

% 训练QDA模型
qdaModel = fitcdiscr(trainData, trainLabels, 'DiscrimType', 'quadratic');

% 预测
predictedLabels = predict(qdaModel, testData);

% 计算准确率
accuracy = sum(predictedLabels == testLabels) / length(testLabels);
fprintf('QDA Classification Accuracy: %.2f%%\n', accuracy * 100);

% 可视化判别边界
figure;
gscatter(data(:,1), data(:,2), labels, 'rb', 'oo');
hold on;

% 绘制决策边界
xrange = linspace(min(data(:,1)), max(data(:,1)), 100);
yrange = linspace(min(data(:,2)), max(data(:,2)), 100);
[x, y] = meshgrid(xrange, yrange);
xy = [x(:) y(:)];
predGrid = predict(qdaModel, xy);
predGrid = reshape(predGrid, size(x));

contour(x, y, predGrid, [1.5 1.5], 'k', 'LineWidth', 2);
xlabel('Feature 1');
ylabel('Feature 2');
legend('Class 1', 'Class 2', 'Decision Boundary');
title('QDA Decision Boundary');
hold off;

得到线性判别分析模型分类的准确率为93.33%。
分类结果可视化如下:

3.4 二次判别分析模型

我们将使用二次判别分析(QDA)对数据进行分类:

% 打乱数据
randIndex = randperm(length(labels));
data = data(randIndex, :);
labels = labels(randIndex, :);

% 拆分训练集和测试集
cv = cvpartition(labels, 'HoldOut', 0.3);
trainData = data(training(cv), :);
trainLabels = labels(training(cv));
testData = data(test(cv), :);
testLabels = labels(test(cv));

% 训练QDA模型
qdaModel = fitcdiscr(trainData, trainLabels, 'DiscrimType', 'quadratic');

% 预测
predictedLabels = predict(qdaModel, testData);

% 计算准确率
accuracy = sum(predictedLabels == testLabels) / length(testLabels);
fprintf('QDA Classification Accuracy: %.2f%%\n', accuracy * 100);

% 可视化判别边界
figure;
gscatter(data(:,1), data(:,2), labels, 'rb', 'oo');
hold on;

% 绘制决策边界
xrange = linspace(min(data(:,1)), max(data(:,1)), 100);
yrange = linspace(min(data(:,2)), max(data(:,2)), 100);
[x, y] = meshgrid(xrange, yrange);
xy = [x(:) y(:)];
predGrid = predict(qdaModel, xy);
predGrid = reshape(predGrid, size(x));

contour(x, y, predGrid, [1.5 1.5], 'k', 'LineWidth', 2);
xlabel('Feature 1');
ylabel('Feature 2');
legend('Class 1', 'Class 2', 'Decision Boundary');
title('QDA Decision Boundary');
hold off;

得到二次判别分析模型分类的准确率为96.67%。
分类结果可视化如下:

4. 总结

  判别分析是一种有效的分类方法,通过对特征空间中数据分布的建模,可以实现对未知样本的分类。本文通过一个具体的案例展示了如何生成数据并使用MATLAB实现线性判别分析模型和二次判别分模型,并进行了分类准确率的计算和决策边界的可视化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/718623.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在mybatis 中如何防止 IN里面的参数过多?

代码示例&#xff1a; select xsid from zhxg_gy_ssfp_cwfp where xsid in <foreach collection"list" item"item" open"(" close")" separator" " index"index"> <if test"(index % 999) 998&quo…

【kyuubi k8s】kyuubi发布k8s执行spark sql

背景 依据上一篇kyuubi与spark集成&#xff0c;并发布spark sql到k8s集群&#xff0c;上一篇的将kyuubi和spark环境放在本地某台服务器上的&#xff0c;为了高可用&#xff0c;本篇将其打包镜像&#xff0c;并发布到k8s。 其实就是将本地的kyuubi&#xff0c;spark&#xff0…

Nginx + KeepAlived高可用负载均衡集群

目录 一、Keepealived脑裂现象 1.现象 2.原因 3.解决 4.预防 二、实验部署 1.两台nginx做初始化操作并安装nginx 2.四层反向代理配置 3.配置高可用 4.准备检查nginx运行状态脚本 5.开启keepalived服务并测试 一、Keepealived脑裂现象 1.现象 主服务器和备服务器都同…

记录第一次edusrc挖掘

文章目录 一、前言二、漏洞说明截止目前已修复 一、前言 edusrc平台介绍 我们可以在关于页面看到edusrc的收录规则 现阶段&#xff0c;教育行业漏洞报告平台接收如下类别单位漏洞&#xff1a; 教育部 各省、自治区教育厅、直辖市教委、各级教育局 学校 教育相关软件 可以看到…

拉依达的嵌入式学习和秋招经验

拉依达的嵌入式学习和秋招经验 你好&#xff0c;我是拉依达。目前我已经结束了自己的学生生涯&#xff0c;开启了人生的下一个阶段。 从研二准备秋招开始&#xff0c;我就逐渐将自己的学习笔记陆续整理并到CSDN上发布。起初只是作为自己学习的备份记录&#xff0c;后续得到了越…

突然挣不到钱了?带货主播大降薪,有人收入“腰斩”!时薪低至20元,“不如街头发小广告”

韭菜都想来割韭菜了&#xff0c;从00后到60后都在直播带货&#xff0c;部分业内人士认为不懂行的商家以及海量素人主播的加入&#xff0c;拉低了行业的平均薪酬。 2024年的电商年中大促接近尾声&#xff0c;电商直播市场再次成为广为关注的焦点。然而&#xff0c;与热闹的“618…

Linux系统部署Samba服务,共享文件夹给Windows

Samba服务是在Linux和UNIX系统上实现SMB协议的一个免费软件&#xff0c;由服务器及客户端程序构成。 Samba服务是连接Linux与Windows的桥梁&#xff0c;它通过实现SMB&#xff08;Server Message Block&#xff09;协议来允许跨平台的文件和打印机共享。该服务不仅支持Linux和…

Xlua三方库Android编译出错解决办法

Xlua三方库Android编译出错解决办法 最近听老师的热更教程&#xff0c;讲到xlua编译android平台会报错&#xff0c;也是看了老师的博客&#xff0c;按照方法去解决&#xff0c;然而问题并没有解决。应该是因为代码更新或者版本不一样&#xff0c;在此简单记录一下解决过程。 参…

Apple Intelligence:苹果大模型部署方案

摘要&#xff1a; 设备端LLM&#xff1a;iOS18版本将包含一个本地小型、低延迟的LLM模型&#xff08;30亿参数&#xff09;&#xff0c;它能够理解用户命令、当前屏幕并在应用程序上执行操作。该模型不仅能处理总结等简单任务&#xff0c;还可以为Siri的“AI智能体”功能提供支…

2024年10款最佳免费人声分离软件,分离人声很简单,只要选对软件!

随着音乐制作和音频编辑的日益普及&#xff0c;人声分离软件在音频处理中扮演着越来越重要的角色。这类软件能够有效地将音频中的人声和伴奏分离&#xff0c;从而帮助用户更好地进行音频编辑和混音。在2024年&#xff0c;市场上涌现出了众多优秀的人声分离软件&#xff0c;本文…

Part 4.2 背包动态规划

->背包模型模板(0/1,分组&#xff0c;完全&#xff0c;多重)<- [NOIP2018 提高组] 货币系统 题目背景 NOIP2018 提高组 D1T2 题目描述 在网友的国度中共有 n n n 种不同面额的货币&#xff0c;第 i i i 种货币的面额为 a [ i ] a[i] a[i]&#xff0c;你可以假设每…

用Python pillow 创建和保存GIF动画

使用pillow库来创建和保存gif GIFs:图形交换格式(gif)是一种位图图像格式&#xff0c;由美国计算机科学家Steve Wilhite于1987年6月15日领导的在线服务提供商CompuServe的一个团队开发。 一个GIF文件通常存储一个图像&#xff0c;但该格式允许在一个文件中存储多个图像。该格…

防止暴力破解,教你如何在登录失败后实施10分钟账户锁定策略!

最近&#xff0c;在服务器上发现了异常的登录尝试。尽管您的团队已经采取了强密码策略和其他安全措施来加固服务器&#xff0c;但恶意程序仍然通过暴力破解的方式试图多次尝试猜测正确的凭据以获取访问权限。为了增强系统的安全性&#xff0c;特别是防止此类暴力破解攻击&#…

YOLOV1-V3详细介绍(新手向、超详细)

本文主要是根据我自己的学习情况来进行讲解&#xff0c;以一个初学者的角度进行阐释&#xff0c;如果有更深层次的点没有涉及到&#xff0c;还请大家多多包涵。 目录 计算机视觉 主流算法 Two-stage&#xff08;双阶段&#xff09; One-stage&#xff08;单阶段&#xff09; …

【计算机网络】TCP报文详解

认识TCP报头 其实协议的形式都是一个结构化的数据&#xff0c;TCP协议也不例外。一起来看看TCP协议的报头是怎么样的。 以上就是TCP报头&#xff0c;实际上是一个结构化的数据&#xff0c;也就是一个结构体。例如&#xff1a; struct tcp_hdr {unsigned int stc_port : 16;un…

【NLP项目-01】手把手教你基于TF-IDF提取向量+贝叶斯或者随机森林进行文本分类

【NLP项目-01】手把手教你基于TF-IDF提取向量贝叶斯或者随机森林进行文本分类 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文…

什么是隐马尔可夫模型?

文章目录 一、说明二、玩具HMM&#xff1a;5′拼接位点识别三、那么&#xff0c;隐藏了什么&#xff1f;四、查找最佳状态路径五、超越最佳得分对齐六、制作更逼真的模型七、收获 关键词&#xff1a;hidden markov model 一、说明 被称为隐马尔可夫模型的统计模型是计算生物学…

5.华为交换机局域网vlan网段隔离配置

目的:PC1与PC2互通 与PC3隔离 LSW1配置 [Huawei]vlan batch 10 20 [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]port link-type access [Huawei-GigabitEthernet0/0/1]port default vlan 10 [Huawei-GigabitEthernet0/0/1]int g0/0/2 [Huawei-GigabitEthernet0/0/2]port…

【网络安全学习】使用Kali做渗透情报收集-02-<指纹识别+目录扫描>

1.指纹识别 指纹识别是指通过一些特征或特定文件来识别目标网站或系统的类型、版本、组件等信息&#xff0c;以便寻找相应的漏洞或攻击方法。 主动指纹识别 通过向目标系统发送正常和异常的请求以及对文件内容的查找&#xff0c;记录响应方式&#xff0c;然后与指纹库进行对比…

SQL160 国庆期间每类视频点赞量和转发量

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-09-24 10:00:002021-09-24 10:00:20110NULL210520022021-09-25 11:00:002021-09-25 11:00:30001NULL310220022021-09-25 11:00:002021-09-25 11:00…