【机器学习】贝叶斯分类器

贝叶斯分类器是一种概率模型,利用贝叶斯公式来解决分类问题。假设样本的特征向量服从一定的概率分布,我们就可以计算出该特征向量属于各个类的条件概率。分类结果是条件概率最大的分类结果。如果假设特征向量的每个分量彼此独立,则它是朴素贝叶斯分类器。如果假设特征向量服从多维正态分布,则它是正态贝叶斯分类器。

一、原理:

贝叶斯公式(Bayes' theorem)

efbe022bcaf693c7f5e5eedd02240de2.png

24949e4000b767a9ca7612fdfd154e6a.png

贝叶斯决策

1cc66fc6d901443132da49f949ff7212.png

朴素贝叶斯分类器

0cc06cc9e0f9548676b1c0199894522f.png

朴素贝叶斯分类器特征向量为离散型随机变量

f394e9e361d63cd198ab4df79a239cc9.png

拉普拉斯平滑

f836e5fd4584014560630605713cb498.png

朴素贝叶斯分类器特征向量为连续型随机变量

9dccb9e21d791dfbf3a5d64ab0f222aa.png

ln函数的性质

632da6b5beeb29306905cf8d657549a0.png

朴素贝叶斯分类器特征向量为连续型随机变量,对于二分类问题,正态贝叶斯分类器

abb8380a3f8e324f10c50acd203a82b0.png

fdb35b50ba535199957f00d4c925ab00.png

协方差朴素贝叶斯

a03c4e1f2f2e46f73b525dd39fdf1568.png

协方差朴素贝叶斯的训练过程

9311a7b6c79f5aafe24921ee68d666d9.png

协方差朴素贝叶斯的预测算法

9765d8bb0d360d243d76f63fc57549fc.png

二、示例程序:

Scikit-learn中提供了多种朴素贝叶斯分类器,其中包括高斯朴素贝叶斯(Gaussian Naive Bayes)分类器。然而,对于鸢尾花数据集,由于其特征是连续型的,因此通常使用的是高斯朴素贝叶斯分类器。

60ce9e0d560e236ab64009b18312dc00.png

以下是在Scikit-learn中使用高斯朴素贝叶斯分类器对鸢尾花数据集进行分类的示例:

# 导入必要的模块
import numpy as np # 导入NumPy库,并将其命名为np,这是一个用于科学计算的库,提供了多维数组和数学函数的支持
import matplotlib.pyplot as plt  # 导入Matplotlib库的pyplot模块,并将其命名为plt,用于创建静态、交互式和动画图表的绘图库。
from sklearn import datasets # 从Scikit-learn库中导入datasets模块,该模块包含了一些标准的数据集,包括机器学习领域常用的一些数据集
from sklearn.naive_bayes import GaussianNB # 从Scikit-learn库中导入朴素贝叶斯分类器的高斯朴素贝叶斯模型。
import matplotlib # 导入Matplotlib库,这是一个用于绘制图表的广泛使用的库。
%matplotlib inline  # 一个Jupyter Notebook魔术命令,用于在Notebook中嵌入Matplotlib图形,并在代码执行后直接在Notebook中显示图形# 定义生成测试样本点的函数
def make_meshgrid(x, y, h=.02):# 计算x、y的最小值和最大值x_min, x_max = x.min() - 1, x.max() + 1y_min, y_max = y.min() - 1, y.max() + 1# 生成均匀网格xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))# 返回网格坐标return xx, yy# 定义预测测试样本并显示的函数
def plot_test_results(ax, clf, xx, yy, **params):# 对测试样本进行预测  xx.ravel() 和 yy.ravel() 用于将二维的坐标网格# 矩阵展平为一维数组。这是因为 clf.predict() 方法接受一维数组形式的输入Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])# 将预测结果转换为网格图像Z = Z.reshape(xx.shape)#返回坐标网格 xx 的形状,即一个包含行数和列数的元组。# 在网格图像上绘制等高线ax.contourf(xx, yy, Z, **params)# 载入iris数据集
iris = datasets.load_iris()
# 只使用前面两个特征  即鸢尾花数据集的萼片长度和萼片宽度。
X = iris.data[:, :2]#选择所有行(即所有样本)和前两列的数据
# 样本标签值
y = iris.target# 创建并训练正态朴素贝叶斯分类器
clf = GaussianNB()
clf.fit(X,y)# 图形标题
title = ('GaussianBayesClassifier')# 创建图形 fig 是整个图形对象,而 ax 是包含的子图对象 子图的大小为 (5, 5)
fig, ax = plt.subplots(figsize = (5, 5))
# 调整子图布局   0.4 表示子图之间的宽度/高度间距为整个子图宽度/高度的 0.4 倍
plt.subplots_adjust(wspace=0.4, hspace=0.4)# 获取第0、1个特征的值
X0, X1 = X[:, 0], X[:, 1]# 生成测试样本点
xx, yy = make_meshgrid(X0, X1)# 显示测试样本的分类结果
plot_test_results(ax, clf, xx, yy, cmap=plt.cm.coolwarm, alpha=0.8)#绘制散点图 显示训练样本
# X0 和 X1 分别是训练样本的前两个特征变量
# c=y 指定了散点的颜色,使用了目标标签 y 中的类别信息。不同的类别用不同的颜色表示。
# cmap=plt.cm.coolwarm 指定了颜色映射,用于将类别映射到具体的颜色。
# s=20 设置了散点的大小为 20。
#edgecolors='k' 设置了散点的边缘颜色为黑色 ('k' 表示黑色)。
ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors='k')# 设置图形属性
ax.set_xlim(xx.min(), xx.max())
ax.set_ylim(yy.min(), yy.max())
ax.set_xlabel('x1')
ax.set_ylabel('x2')
ax.set_xticks(())# 将 x 轴的刻度标签设为空
ax.set_yticks(())
ax.set_title(title)# 显示图形
plt.show()

707ec4e195ee2b7f927269ce55ea872a.png

三、贝叶斯分类器的应用

f62a2b8759ee7dd01213b33843e77fc9.png

参考网址:
https://programmer.group/principle-of-machine-learning-bayesian-classifier-and-its-sklearn-implementation.html Principle of machine learning Bayesian classifier and its sklearn implementation --- 机器学习贝叶斯分类器原理及其sklearn实现 (programmer.group)

https://zhuanlan.zhihu.com/p/25462307 OpenCV机器学习——朴素贝叶斯NBC - 知乎 (zhihu.com)

https://blog.csdn.net/qinzhongyuan/article/details/106434854 鸢尾花(Iris)数据集_iris数据集-CSDN博客

https://zhuanlan.zhihu.com/p/480326305 数据集 |鸢尾花数据集 - 知乎 (zhihu.com)

The End

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

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

相关文章

Java,数据结构与集合源码,关于List接口的实现类(ArrayList、Vector、LinkedList)的源码剖析

目录 ArrayList ArrayList的特点: ArrayList源码解析: Vector Vector的特点: Vector源码解析: LinkedList LinkedList的特点: LinkedList的源码剖析: 使用说明: ArrayList ArrayList的…

开源和闭源软件对开发的影响

开源软件的优势: 开源性:开源软件允许任何人查看、修改和发布源代码,这促进了代码的共享和集体学习。透明性:开源软件提高了软件的透明度,使用户可以更好地理解软件的工作原理,增加对软件的信任。社区支持…

【OpenCV实现图像:OpenCV利用Python创作热力图】

文章目录 概要读取图像图像灰度化**像素化效果**小结 概要 热力图是一种强大的统计图表,通过对数据进行色彩映射,直观展示了数据分布的热度和密度。在绘制热力图时,关键在于指定颜色映射的规则,这决定了图中不同数值的呈现方式。…

matlab 一些画图法总结(持续更新)

*****************************************画Dmd_L极坐标表示法**************************************** if(~exist(Dmd_L_array)) Dmd_L_array []; end Dmd_L_array [Dmd_L_array; Dmd_L]; thetaangle(Dmd_L_array); rabs(Dmd_L_array); polarplot(theta,r,o); *****…

【教程】ACM 模式输入输出 C++

目录 输入输出输入单个数字 or 字符输入单行数列输入单行字符串输入多行符号列&#xff0c;已知行数和列数 字符串处理删除字符串中的某个字符 / 子串find()erase() 输入字符串并分割到 vector\<string> 中getline()stringstream示例 快速排序其他 输入输出 输入单个数字…

渗透实例------2个星期艰难的渗透纪实

2个星期艰难的渗透纪实 kyo327 入侵原因,需删一帖子,目标用www.111.com代替,前期通过初期的网站文件暴力猜解,扫描到robots.txt这个文件,有以下目录。如图1: 图1 再通过对这些文件的访问,从3gadm.php文件的标题栏得到该网站采用的是diy-page8.3的cms,自然可以先用搜索…

导购APP、淘客查券机器人与淘客系统:全面对比与选择

导购APP、淘客机器人与淘客系统&#xff1a;全面对比与选择 在互联网购物的时代&#xff0c;导购APP、淘客机器人和微赚淘客系统成为了消费者们的三大重要工具。它们各具优势&#xff0c;但也存在一些问题。本文将为您详细对比这三种工具&#xff0c;帮助您在购物时做出最合适…

Android JNI 异常定位(2)—— addr2line

Android native报错有时候只有一句 signal 11 (SIGSEGV)&#xff0c;这种情况仅通过log是很难定位到问题的。不过Android 在/data/tombstones目录保存了错误的堆栈信息&#xff0c;为定位bug提供了路径。不过一般这里的log都无法像java一样直接定位的出错的行数。如下图&#x…

2023做车载测试真的可以远离内耗!转行车载月入20K!

2023年&#xff0c;车载测试正处于一个发展阶段&#xff0c;随着新能源汽车的蓬勃发展&#xff0c;电气化、智能化逐渐成为发展趋势。在汽车开发过程中&#xff0c;测试是非常重要的一个环节。现在软件越来越多地被应用到汽车上&#xff0c;对软件测试的需求也越来越多、越来越…

Linux上使用ldapsearch命令通过AD GC查询指定用户

一&#xff0c;前言 需要你对Microsoft AD ,AD GC有一定的了解&#xff0c;并且AD要启用了GC。特别是要弄懂&#xff0c;林和域的关系,你才能明白GC在他俩之间的关系。 GC中文名&#xff1a;全局编录 会将你林下所有域的所有对象存储在一个目录里面&#xff0c;但是并没有存储…

数据库数据恢复—MongoDB数据库文件拷贝出现错误的数据恢复案例

MongoDB数据库数据恢复环境&#xff1a; 一台Windows Server操作系统的虚拟机&#xff0c;虚拟机上部署有MongoDB数据库。 MongoDB数据库故障&检测&#xff1a; 在未关闭MongoDB服务的情况下&#xff0c;工作人员将MongoDB数据库文件拷贝到其他分区&#xff0c;然后将原数…

力扣:175. 组合两个表(Python3)

题目&#xff1a; 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主键&#xff08;具有唯一值的列&#…

js进阶笔记之原型,原型链

目录 1、原型对象 constructor 属性 对象原型 2、原型链 3、instanceof 4、原型继承 1、原型对象 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 面向对象是把事务分解成为…

音频采集的相关基础知识

本文引注: https://zhuanlan.zhihu.com/p/652629744 1.麦克风的种类 (1)模拟麦克风 ECM麦克风&#xff1a;驻极体电容麦克风(ECM)&#xff0c;典型的汽车ECM麦克风是一种将ECM单元与小型放大器电路整合在单个外壳中的装置。放大器提供一个模拟信号&#xff0c;其电压电平允许…

软件工程理论与实践 (吕云翔) 第十一章: 软件编程课后习题及其答案解析

第十一章&#xff1a; 软件编程 1.判断题 &#xff08;1&#xff09;C语言是一种纯面向对象语言。&#xff08;&#xff09; &#xff08;2&#xff09;进行程序设计语言的选择时&#xff0c;首先考虑的是应用领域。&#xff08;√&#xff09; &#xff08;3&#xff09;良…

JavaScript 如何拷贝对像(Object)或者数组(Array)

目录 JavaScript数据拷贝类型 浅拷贝 深拷贝 举例&#xff1a; 浅拷贝 数组 对象 深拷贝 lodash cloneDeep使用示例 自定义深拷贝方法示例 JSON.parse() 和 JSON.stringify()使用示例 JavaScript数据拷贝类型 浅拷贝 数组可以使用Array.prototype.slice()方法 …

JS实现数字千分位分割(手写纯享版)

简介 在前端开发中&#xff0c;我们经常需要对数字进行格式化&#xff0c;其中一种常见的需求就是将数字表示为千分位格式&#xff0c;以提高可读性。本文将介绍如何使用 JavaScript 实现一个简单而有效的千分位格式化函数。 千分位格式化的需求 千分位格式化是一种将数字中…

python实现鼠标实时坐标监测

python实现鼠标实时坐标监测 一、说明 使用了以下技术和库&#xff1a; tkinter&#xff1a;用于创建GUI界面。pyperclip&#xff1a;用于复制文本到剪贴板。pynput.mouse&#xff1a;用于监听鼠标事件&#xff0c;包括移动和点击。threading&#xff1a;用于创建多线程&…

PWM实验

PWM相关概念 PWM:脉冲宽度调制定时器 脉冲&#xff1a;方波信号&#xff0c;高低电平变化产生方波 周期&#xff1a;高低电平变化所需要时间 频率&#xff1a;1s钟可以产生方波个数 占空比&#xff1a;在一个方波内&#xff0c;高电平占用的百分比 宽度调制&#xff1a;占…

AI:86-基于深度学习的街景图像地理位置识别

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…