MATLAB 实现贝叶斯决策

1. 原理

后验概率:

1.最小错误率决策(最大后验概率决策):

2.最小风险决策:

3.正态分布下的贝叶斯决策

2. 过程

2.1 训练集数据可视化

导入两类训练集数据,并绘制其数据分布,如下:

图1 训练集数据分布

2.2 求取训练集的平均值以及协方差

通过内置mean函数求平均值,cov函数求协方差并设定两类样本先验概率均为0.5

均值及协方差值如下:

图2 均值及协方差

2.3 测试集数据可视化

导入测试集数据并通过find函数分别找出两类数据对应的位置进行绘图

结果如下:

图3 测试集分布

2.4 建立判别函数并通过判别函数对测试集分类

通过以上代码可以将依次将测试集中的样本特征值代入判别函数的公式中进行计算,值大于0的则分为第二类样本(女性)否则为第一类样本(男性),最后将分类结果绘制出结果如下:

图4 测试集分类结果

通过上图可以看出分类结果中有一个样本点出错了

2.5 探究先验概率对错误率的影响

由于以上实验在两类样本先验概率均为0.5的情况下仍然出现了一点错误,于是接下来开始改变先验概率进一步探究它对本实验中分类的情况的影响

将第一类样本先验概率pw1设置为从0到1步长为0.1开始变化,第二类样本先验概率pw2=1-pw1,记录不同pw1下的错误率并绘图,结果如下:

图5 先验概率与错误率间的大致关系

从上图可以发现要想错误率能够达到0,则第一类样本先验概率的值大概要在0.4左右,而在0.4的两边错误率会有增加的趋势,而由于测试集第一类样本个数多于第二类样本个数,于是最大错误率的情况为pw1=0,及所有样本均被判为第二类。

查看pw1=0.4时的分类结果如下:

图6 pw1=0.4的分类结果

分类全部正确。

2.6 通过最小风险的贝叶斯决策进行分类

上述实验使用的是最小错误率贝叶斯决策,以先验概率作为主导,接下来引入损失函数如下:

图7 损失函数

将最小错误率实验中的判别函数改写为最小风险的形式,令先验概率相同

由此时的决策表所对应的分类结果如下:

图8 分类结果1

可以看出其中有一些属于女性样本的数据被错误分类到男性样本中。

接下来改变损失值多次实验,结果如下:

图9 L11=L22=0,L12=3,L21=1

图10 L11=L22=0,L12=1,L21=1

此时可以看出分类结果与图4一致

3. 结果与分析

本文的核心内容时建立最小错误率与最小风险决策分类器中的判别函数。实验中需要建立的是正态分布模式的贝叶斯决策,通过计算出样本的均值和协方差并且代入判别函数从而进行判断。从图4到图6的结果以及公式中可以看出最小错误率的贝叶斯决策中先验概率起很大的作用,所以先验概率起主导作用。而在后续通过最小风险的贝叶斯决策中也可以明显看出损失函数值的改变对结果有较大影响,例如通过分析图8中的结果对应的损失函数值可以得知L21值较大,即实际为男性却判别成了女性所需要的代价较大,由此分类器在做决策时对于两类样本边缘的数据更趋向于决策为男性以此达到最小风险。通过观察图10的结果以及公式可以得知,0-1损失的最小风险决策等价于最小错误率决策。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云时代【5】—— LXC 与 容器

云时代【5】—— LXC 与 容器 三、LXC(一)基本介绍(二)相关 Linux 指令实战:使用 LXC 操作容器 四、Docker(一)删除、安装、配置(二)镜像仓库1. 分类2. 相关指令&#xf…

JavaSE-09(Java IO精华总结)

Java IO 简单做个总结: 1 .InputStream/OutputStream 字节流的抽象类。2 .Reader/Writer 字符流的抽象类。3 .FileInputStream/FileOutputStream 节点流:以字节为单位直接操作“文件”。4 .ByteArrayInputStream/ByteArrayOutputStream 节点流&#xff…

Running job: job_1709516801756_0003

** yarn运行卡在Running job: job_1709516801756_0003问题解决: ** 在运行wordcount时出现错误,一直卡住 运行命令:hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output 出现错误&#xff1a…

岭回归算法

回归分析方法是利用数理统计方法分析数据,建立自变量和因变量间的回归模型,用于预测因变量变化的分析方法。其中比较经典的是HoerI和Kennard提出的岭回归算法。岭回归算法是在最小二乘法的基础上引|入正则项,使回归模型具有较好泛化能力和稳定…

经典思路!人参叶际微生物如何发8分文章?

中国中医科学院中药研究所在《Environmental Microbiome》期刊上(IF7.9)发表了关于叶际真菌微生态网络的文章,该研究通过对ITS测序结果和环境因子测定结果以及皂苷含量测定结果进行生信分析,提出了维持微生态网络的稳定性策略和影响皂苷含量的因素。 期刊…

H12-821_113

113.如图所示是路由器现ATE输出的部分信息,以下关于这部分信息的描述,错误的是哪一项? A.display pim rp-info命令用来查看组播组对应的RP信息 B.RP地址是2.2.2.2 C.组地址是225.0.0.0 D.RP的优先级是0 答案:C 注释: …

HCIA-Datacom题库(自己整理分类的)_29_PPP协议判断【6道题】

1.数据链路层采用PPP封装链路两端的IP地址可以不在同一个网段。√ 2.PPP链路两端不在同一网段不能通信。 3.参考以下拓扑及配置,路由器R1与R2通过Serial低速线缆连接,且数据链路层封装使用PPP。当R1和R2的Holdtime不一致时,PPP协商失败&…

python使用常用的路径问题

PythonPath多个路径的使用 通过命令行直接修改 export PYTHONPATH$PYTHONPATH:/path/to/directoryPythonPath多个路径的使用 export PYTHONPATH$PYTHONPATH:/path/to/directory1:/path/to/directory2PythonPath多个路径的使用 python path 移除路径 python path python中…

爬虫实战——麻省理工学院新闻

文章目录 发现宝藏一、 目标二、 浅析三、获取所有模块四、请求处理模块、版面、文章1. 分析切换页面的参数传递2. 获取共有多少页标签并遍历版面3.解析版面并保存版面信息4. 解析文章列表和文章5. 清洗文章6. 保存文章图片 五、完整代码六、效果展示 发现宝藏 前些天发现了一…

jQuery AJAX get() 和 post() 方法—— W3school 详解 简单易懂(二十四)

jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。 HTTP 请求:GET vs. POST 两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST。 GET - 从指定的资源请求数据POST - 向指定的资源提交要处理的数据 GET 基本…

MySQL面试题-日志(答案版)

日志 1、为什么需要 undo log? (1)实现事务回滚,保障事务的原子性。 事务处理过程中,如果出现了错误或者用户执 行了 ROLLBACK 语句,MySQL 可以利用 undo log 中的历史数据将数据恢复到事务开始之前的状态…

ssh无法直接登入Linux超级用户root(23/3/3更新)

说明:不允许ssh用超级用户的身份登入是为了安全性,如果只是学习使用对安全性没啥要求可以按以下操作解除限制 以普通用户登录到服务器后,执行以下命令以编辑 SSH 服务器配置文件 /etc/ssh/sshd_config sudo nano /etc/ssh/sshd_config 此时会…

【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现

快乐的流畅:个人主页 个人专栏:《C语言》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 一、仿函数1.1 仿函数的介绍1.2 仿函数的优势 二、priority_queue2.1 push2.2 pop2.3 top2.4 size2.5 empty 三、…

【3D Slicer】心脏CT图像分割操作保姆级教程 Cardiac CT image segmentation

心脏CT图像分割操作流程指南 1 安装3D Slicer软件2 打开文件2.1 从File->Add Data->Choose File2.2 直接拖入 3 进行分割操作4 切片填充 Fill between slices5 第二个例子6 数据保存7 打开保存后的文件 1 安装3D Slicer软件 方式二选一 1.官网:3D Slicer 2.百…

JNI方案说明和使用方法介绍

JNI简介 JNI(Java Native Interface)是Java编程语言中用于实现Java代码与本地(Native)代码(通常是C或C++代码)交互的机制。它允许Java应用程序调用本地代码中的功能,也可以让本地代码调用Java类和方法。JNI在Java平台上实现了Java与其他编程语言的互操作性。(即可互相…

无字母数字rce总结(自增、取反、异或、或、临时文件上传)

目录 自增 取反 异或 或 临时文件上传 自增 自 PHP 8.3.0 起,此功能已软弃用 在 PHP 中,可以递增非数字字符串。该字符串必须是字母数字 ASCII 字符串。当到达字母 Z 且递增到下个字母时,将进位到左侧值。例如,$a Z; $a;将…

C++知识点总结(23):高级模拟算法

高级模拟算法例题 一、P5661 公交换乘1. 审题2. 思路3. 参考答案 二、P1003 铺地毯1. 审题2. 参考答案 三、P1071 潜伏者1. 审题2. 思路3. 参考答案 一、P5661 公交换乘 1. 审题 2. 思路 总花费中,地铁是必须花费的,公交车可能不花钱(坐地…

使用VisualDL进行模型训练和数据可视化

文章目录 使用VisualDL进行模型训练和数据可视化1. 环境准备1.1 安装VisualDL1.2 设置VisualDL 2. 写入数据并可视化2.1 检查训练数据2.2 跟踪模型训练2.3 评估模型训练效果 3. 启动VisualDL服务4. 总结 使用VisualDL进行模型训练和数据可视化 VisualDL是飞桨提供的一个可视化…

Java中的Object类详解

Java中的Object类详解 1. equals(Object obj)2. hashCode()3. toString()4.getClass()5.notify() 和 notifyAll()6. wait() 和 wait(long timeout)7. clone()8.finalize() Java中的 Object 类是所有类的父类,可以被所有Java类继承并使用。下面先看下源码&#xff1a…

google最新大语言模型gemma本地化部署

Gemma是google推出的新一代大语言模型,构建目标是本地化、开源、高性能。 与同类大语言模型对比,它不仅对硬件的依赖更小,性能却更高。关键是完全开源,使得对模型在具有行业特性的场景中,有了高度定制的能力。 Gemma模…