《机器学习》之贝叶斯(Bayes)算法
目录
一、前言
二、贝叶斯算法原理解析
1、贝叶斯公式
2、朴素贝叶斯算法
3、计算步骤
4、例题:
(1)、 计算先验概率
(2)、计算条件概率
(3)、计算后验概率
(4)、比较后验概率选出答案
三、贝叶斯算法在机器学习中的应用
1、API接口
2、代码演示
3、结果展示
4、贝叶斯算法的优缺点
(1)、优点
(2)、缺点
四、总结
一、前言
贝叶斯算法起源于18世纪英国数学家托马斯·贝叶斯(Thomas Bayes)提出的贝叶斯定理,经过几个世纪的发展,逐渐成为统计学和机器学习中的重要工具。其核心原理是基于条件概率,通过先验知识和新观测数据相结合,计算后验概率,从而实现对事件概率的动态更新。
常见的贝叶斯算法包括朴素贝叶斯分类器、贝叶斯网络、贝叶斯优化和贝叶斯滤波等。朴素贝叶斯分类器广泛应用于文本分类和垃圾邮件过滤;贝叶斯网络用于建模变量间的复杂概率关系;贝叶斯优化用于高效优化黑箱函数;贝叶斯滤波则在信号处理和机器人定位中发挥重要作用。
贝叶斯算法的用途广泛,涵盖了从自然语言处理、推荐系统到医学诊断和金融预测等多个领域。其优势在于能够灵活结合先验知识和数据,但同时也面临计算复杂度高和先验选择主观性等挑战。随着计算能力的提升和算法的优化,贝叶斯方法在现代数据科学中继续发挥着重要作用。
二、贝叶斯算法原理解析
贝叶斯算法的核心思想是通过不断更新先验概率,结合新的数据,得到更准确的后验概率。这一特性使其在处理不确定性和噪声数据时表现出色。常见的贝叶斯算法包括朴素贝叶斯分类器、贝叶斯网络、贝叶斯优化和贝叶斯滤波等。
1、贝叶斯公式
其中:
-
P(A∣B)是在事件B发生的条件下事件A发生的概率,称为后验概率。它反映了我们在考虑新信息后对某个事件或类别的信念或认知的变化。
-
例子:在垃圾邮件过滤中,P(垃圾邮件∣包含“免费”一词)表示在邮件包含“免费”一词的条件下,该邮件是垃圾邮件的概率。
-
-
P(B∣A)是在事件A发生的条件下事件B发生的概率,称为似然。
-
例子:在垃圾邮件过滤中,P(包含“免费”一词∣垃圾邮件) 表示在邮件是垃圾邮件的条件下,邮件中包含“免费”一词的概率。
-
-
P(A) 是事件A发生的先验概率。先验概率通常是我们对某个事件或类别的初始认知或假设。
-
例子:先验概率 P(垃圾邮件) 表示在没有分析邮件内容之前,某封邮件是垃圾邮件的初始概率(例如,根据历史数据,垃圾邮件占总邮件的20%)。
-
-
P(B) 是事件B发生的边际概率。
-
例子:在垃圾邮件过滤中,P(包含“免费”一词)表示所有邮件中包含“免费”一词的总概率,无论邮件是否是垃圾邮件。
-
2、朴素贝叶斯算法
朴素贝叶斯分类器(Naive Bayes Classifier) 是一种基于贝叶斯定理的简单概率分类算法,广泛应用于文本分类、垃圾邮件过滤、情感分析等任务。它的“朴素”体现在假设所有特征之间相互独立,尽管这一假设在现实中往往不成立,但朴素贝叶斯分类器在许多实际应用中表现优异,尤其是在高维数据(如文本数据)中。
由于朴素贝叶斯假设特征之间相互独立,似然 P(B∣A)可以分解为:
P(B∣A)=P(x1∣A)⋅P(x2∣A)⋅…⋅P(xn∣A)
其中 x1,x2,…,xnx1,x2,…,xn 是输入特征的各个维度。
3、计算步骤
-
计算先验概率:基于训练数据,计算每个类别的先验概率 P(A)。
-
计算似然:对于每个特征,计算在给定类别下的条件概率 P(xi∣A)。
-
计算后验概率:对于新的输入样本,利用贝叶斯定理计算每个类别的后验概率。
-
选择最大概率类别:将后验概率最大的类别作为预测结果。
4、例题:
假设我们有一个简单的二分类问题,数据集如下表所示。目标是利用朴素贝叶斯分类器预测一个新样本的类别。
编号 | 特征1(颜色) | 特征2(根蒂) | 类别 |
---|---|---|---|
1 | 青绿 | 蜷缩 | 好瓜 |
2 | 乌黑 | 蜷缩 | 好瓜 |
3 | 青绿 | 硬挺 | 坏瓜 |
4 | 浅白 | 蜷缩 | 坏瓜 |
5 | 乌黑 | 稍蜷 | 好瓜 |
6 | 青绿 | 稍蜷 | 好瓜 |
7 | 浅白 | 硬挺 | 坏瓜 |
8 | 乌黑 | 硬挺 | 坏瓜 |
现在有一个新样本:颜色=青绿,根蒂=蜷缩,请预测其类别。
解题步骤
(1)、 计算先验概率
-
P(好瓜)=4/8=0.5
-
P(坏瓜)=4/8=0.5
(2)、计算条件概率
对于每个特征,计算在给定类别下的条件概率。
特征1:颜色
- P(颜色=青绿∣好瓜)=2/4=0.5
- P(颜色=青绿∣坏瓜)=1/4=0.25
特征2:根蒂
- P(根蒂=蜷缩∣好瓜)=2/4=0.5
- P(根蒂=蜷缩∣坏瓜)=1/4=0.25
(3)、计算后验概率
P(好瓜|颜色=青绿,根蒂=蜷缩) =P(好瓜)*P(颜色=青绿∣好瓜)*P(根蒂=蜷缩∣好瓜)/P(颜色=青绿,根蒂=蜷缩)
=0.5 * 0.5 * 0.5 = 0.125/P(颜色=青绿,根蒂=蜷缩)
P(坏瓜|颜色=青绿,根蒂=蜷缩) =P(坏瓜)*P(颜色=青绿∣坏瓜)*P(根蒂=蜷缩∣坏瓜)/P(颜色=青绿,根蒂=蜷缩)
=0.5 * 0.25 * 0.25 = 0.03125/P(颜色=青绿,根蒂=蜷缩)
(4)、比较后验概率选出答案
因为0.125 > 0.03125,且分母相同
所以颜色=青绿,根蒂=蜷缩时预测为好瓜。
三、贝叶斯算法在机器学习中的应用
以多项式朴素贝叶斯为例
1、API接口
from sklearn.naive_bayes import MultinomialNB
MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
alpha | 浮点数 | 1.0 | 平滑参数(拉普拉斯平滑/Lidstone平滑),避免零概率问题。 |
fit_prior | 布尔值 | True | 是否从数据中学习类别的先验概率。若为 False ,则使用均匀分布。 |
class_prior | 数组或列表 | None | 手动指定类别的先验概率。若为 None ,则从数据中学习。 |
2、代码演示
以sklearn自带的手写数字数据集为例
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
from sklearn import metrics# 可视化混淆矩阵
def cm_plot(y, yp):cm = confusion_matrix(y, yp) # 计算混淆矩阵plt.matshow(cm, cmap=plt.cm.Blues) # 使用蓝色调绘制混淆矩阵plt.colorbar() # 添加颜色条for x in range(len(cm)):for y in range(len(cm)):# 在每个单元格中标注数值plt.annotate(cm[x, y], xy=(x, y), horizontalalignment='center', verticalalignment='center')plt.ylabel('True label') # 设置y轴标签plt.xlabel('Predicted label') # 设置x轴标签return plt
# 数据预处理
data = load_digits()
x = data.data
y = data.target
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=0)
# 创建贝叶斯分类器
cf = MultinomialNB()
# 训练
cf.fit(x_train,y_train)# 自测
pr1 = cf.predict(x_train)
# 绘制混淆矩阵
cm_plot(y_train,pr1).show()
# 预测
pr2 = cf.predict(x_test)
# 绘制混淆矩阵
cm_plot(y_test,pr2).show()
print('准确率:',cf.score(x_test,y_test))
print(metrics.classification_report(y_test,pr2))
3、结果展示
4、贝叶斯算法的优缺点
(1)、优点
理论基础坚实:贝叶斯算法基于贝叶斯定理,它为概率模型的学习和推理提供了明确的理论框架。
易于实现:贝叶斯算法的逻辑简单,只要使用贝叶斯公式转化即可,因此易于实现。
分类过程中时空开销小:贝叶斯算法假设特征之间相互独立,因此在分类过程中,只会涉及到二维存储,大大降低了时空开销。
易于并行化:贝叶斯算法可以很方便地进行并行化处理,提高计算效率。
(2)、缺点
假设前提:贝叶斯算法假设样本特征彼此独立,这个假设在实际应用中往往是不成立的,尤其在属性个数比较多或者属性之间相关性较大时,分类效果不好。
对噪声敏感:如果数据中存在大量噪声,贝叶斯算法可能会表现不佳。
模型选择:贝叶斯算法需要对模型进行正确的选择,如果模型选择不当,可能会导致算法性能下降。
高维特征空间的应用限制:贝叶斯算法在处理高维特征空间时可能会遇到困难,因为高维空间中的数据通常具有稀疏性,这会导致贝叶斯网络的学习和推理变得非常困难。
四、总结
贝叶斯算法提供了一种基于概率的推理框架,能够处理各种不确定性和复杂性。在现实世界的数据集中,特征之间的依赖关系、类别的模糊性等问题往往难以避免。贝叶斯算法通过计算条件概率来估计类别的后验概率,从而能够在这些不确定性中找到最可能的分类结果。
贝叶斯算法具有坚实的数学理论基础,其推导过程清晰且易于理解。这使得贝叶斯算法在实际应用中具有较高的可靠性和稳定性。同时,贝叶斯算法的计算过程相对简单,使得它能够在处理大规模数据集时保持较高的效率。
贝叶斯算法在文本分类、情感分析、推荐系统等多个领域都有广泛的应用。通过结合具体场景和数据特点,贝叶斯算法能够发挥出强大的分类和预测能力,为机器学习应用提供有力的支持。
相关文章:
《机器学习》之贝叶斯(Bayes)算法
目录 一、前言 二、贝叶斯算法原理解析 1、贝叶斯公式 2、朴素贝叶斯算法 3、计算步骤 4、例题: (1)、 计算先验概率 (2)、计算条件概率 (3)、计算后验概率 (4)…...
Redis实现高效的负载均衡算法
1. Redis存储设计 我们需要在 Redis 中存储以下信息: 配置列表(List<Config>):存储所有配置项。总权重:存储所有配置的总权重。当前轮询状态:存储当前的轮询状态(如当前随机值或索引&am…...
虚拟文件系统 VFS
目录 虚拟文件系统 VFS 文件系统挂载过程 虚拟文件系统 VFS 统一标准的系统调用接口: VFS定义了一组标准的文件操作API,如open(), read(), write(), close()等,使得用户空间的应用程序无需关心底层文件系统的具体类型。 下层文件系统必须实现…...
基于Android的民宿租赁系统的设计与实现
博主介绍:java高级开发,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…...
数据链路层-STP
生成树协议STP(Spanning Tree Protocol) 它的实现目标是:在包含有物理环路的网络中,构建出一个能够连通全网各节点的树型无环逻辑拓扑。 选举根交换机: 选举根端口: 选举指定端口: 端口名字&…...
OceanBase环境搭建与熟悉全攻略:开启分布式数据库探索之旅
《OceanBase环境搭建与熟悉全攻略:开启分布式数据库探索之旅》 在当今数字化浪潮汹涌澎湃的时代,数据量呈爆炸式增长,业务对数据库的性能、可靠性和扩展性提出了前所未有的要求。OceanBase作为一款极具创新性的分布式数据库,正逐…...
tensor core实现flash_attn_mma_share_kv源码分析
一 源码分析 1.1 函数入口 void flash_attn_mma_stages_split_q_shared_kv(torch::Tensor Q, torch::Tensor K, torch::Tensor V, torch::Tensor O, int stages) {CHECK_TORCH_TENSOR_DTYPE(Q, torch::kHalf) // Q [B,H,N,D]CHECK_TORCH_TENSOR_DTYPE(K, torch::kHalf) // K …...
【源码解析】Java NIO 包中的 MappedByteBuffer
文章目录 1. 前言2. MappedByteBuffer3. 例子4. 属性5. 构造器6. mappingOffset、mappingAddress、mappingLength7. isLoaded 判断内存是否还在内存中8. load 方法将 ByteBuffer 加载到 Page Cache 中9. force 刷盘 1. 前言 上一篇文章我们介绍了 HeapByteBuffer 的源码&#…...
【Docker系列】容器内目录显示异常的解决之道
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
echarts:dataZoom属性横向滚动条拖拽不生效
问: 拖拽的过程中,第一次向右拖拽正常,然后就报错: echarts报错: var pointerOption pointerShapeBuilder[axisPointerType](axis,pixeValue,otherExtent),(axis,pixeValue,otherExtent)下划线红色报错:…...
25/1/12 算法笔记 剖析Yolov8底层逻辑
YOLOv8 是一种基于深度学习的目标检测和图像分割模型,属于 YOLO(You Only Look Once)系列的最新版本。YOLO 系列模型以其高效的实时目标检测能力而闻名,YOLOv8 在此基础上进行了一些优化和改进。 Yolov8的主要特点: …...
Python双指针
双指针 双指针:在区间操作时,利用两个下标同时遍历,进行高效操作 双指针利用区间性质可以把 O ( n 2 ) O(n^2) O(n2) 时间降低到 O ( n ) O(n) O(n) 反向扫描 反向扫描: l e f t left left 起点,不断往右走&…...
1、docker概念和基本使用命令
docker概念 微服务:不再是以完整的物理机为基础的服务软件,而是借助于宿主机的性能。以小量的形式,单独部署的应用。 docker:是一个开源的应用容器引擎,基于go语言开发的,使用时apache2.0的协议。docker是…...
数据结构与算法之链表: LeetCode 92. 反转链表 II (Ts版)
反转链表 II https://leetcode.cn/problems/reverse-linked-list-ii/description/ 描述 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 示例 1 输入&…...
【PPTist】插入形状、插入图片、插入图表
一、插入形状 插入形状有两种情况,一种是插入固定的形状, 一种是插入自定义的形状。 插入固定的形状时,跟上一篇文章 绘制文本框 是一样一样的,都是调用的 mainStore.setCreatingElement() 方法,只不多传的类型不一…...
三台Centos7.9中Docker部署Redis集群
Docker部署Redis集群 1. 安装 Docker 和 Docker Compose安装 Docker:安装 Docker Compose: 2. 配置 Redis 容器和网络3. 启动 Redis 容器4. 设置 Redis 集群4.1 集群创建异常处理 5. 验证和测试总结 如果 CentOS 服务器上还没有安装 Docker 和 Docker Co…...
Entity 的材质(棋盘、条纹、网格)
Entity 的材质 普通物体的材质 import { nextTick, onMounted, ref } from vue import * as Cesium from cesium // console.log(Cesium, Cesium)const viewer ref<any>(null)onMounted(() > { ... })let material Cesium.Color.YELLOW.withAlpha(0.5)Cesium.Colo…...
MACPA:fMRI连接性分析的新工具
摘要 不同脑区的共同激活为它们之间的功能交互或连接提供了一个有价值的衡量指标。元分析连接模型(MACM)是一种经过充分验证的研究某一特定区域共激活模式的方法,该方法对基于任务的功能磁共振成像(task-fMRI)数据进行种子点(seed-based)元分析。虽然MACM是一种强大…...
JavaScript-一份你的前端入门说明书(计算机专业)
一.简介 1.起源 JavaScript 起源于 1995 年,当时它主要是为了满足网页交互的需求而被创建。它最初的设计目的是为了让网页开发者能够在网页中添加一些简单的交互效果和动态内容。在那个时期,网页大多是静态的,而 JavaScript 的出现为网页带来了新的活力。Netscape 公司的 B…...
STM32供电参考设计
STM32供电参考设计 在图中有VDD,VSS和VDDA,VSSA两种类型的供电引脚,其数据手册解释如下: 令我不解的是:VDDA和VSSA必须分别连接到VDD和VSS,这是什么意思?有大佬能够解答一下吗?…...
python+fpdf:创建pdf并实现表格数据写入
目录 创建pdf文件对象 新增页 添加自定义字体 设置字体 设置文字颜色和背景色 插入内容 换行 插入图片 保存pdf 完整代码 安装:pip install fpdf 创建pdf文件对象 from fpdf import FPDF, Alignpdf FPDF() # 创建pdf文件对象 获取边距 print(pdf.l_…...
亚远景-ASPICE评估:汽车软件项目的过程能力评价
ASPICE(Automotive SPICE)的评估对象主要是汽车软件研发过程。 这个评估过程不仅仅关注最终的软件产品,而是深入到软件开发的全生命周期中,从需求分析、设计、编码、测试到发布和维护等各个环节。 具体来说,ASPICE评…...
电脑提示directx错误导致玩不了游戏怎么办?dx出错的解决方法
想必大家都有过这样的崩溃瞬间:满心欢喜打开心仪的游戏,准备在虚拟世界里大杀四方或者畅游冒险,结果屏幕上突然弹出个 DirectX 错误的提示框,紧接着游戏闪退,一切美好戛然而止。DirectX 作为 Windows 系统下游戏运行的…...
【13】制作镜像以及重启实例
制作镜像 k8s集群 有两个镜像需要制作,一个是master节点,一个是node节点。 在master节点上成功部署了k8s的控制平面,在node节点上部署了worker节点的配置,不知道打包镜像重启之后集群的状态是什么样的。 确认集群在运行&#…...
electron 启动警告
1. 问题 当启动 electron 时,控制台警告 Electron Security Warning (Insecure Content-Security-Policy) This renderer process has either no Content Security 2. 解决方法 在主进程文件 main.js 中添加如下内容 process.env["ELECTRON_DISABLE_SECURI…...
wow-agent 学习笔记
wow-agent-课程详情 | Datawhale 前两课比较基础,无笔记 第三课 阅卷智能体这一块,曾经做过一点和AI助教相关的内容,也是用了一个prompt去进行CoT,但是风格和课程中的不太相同,在下面附上我的prompt 你是一名资深教…...
使用Cilium/eBPF实现大规模云原生网络和安全
大家读完觉得有帮助记得关注和点赞!!! 目录 抽象 1 Trip.com 云基础设施 1.1 分层架构 1.2 更多细节 2 纤毛在 Trip.com 2.1 推出时间表 2.2 自定义 2.3 优化和调整 2.3.1 解耦安装 2.3.2 避免重试/重启风暴 2.3.3 稳定性优先 2…...
“深入浅出”系列之C++:(4)回调函数
在写项目的时候遇见一个问题,现在的需求是主项目需要拿到子项目的结果来进行显示,那么如何集成呢,子项目里面有一个MainWindow类,类里 回调函数是一种通过函数指针将函数作为参数传递给另一个函数的编程技术。这种机制允许程序在特…...
Mysql--运维篇--主从复制和集群(主从复制I/O线程,SQL线程,二进制日志,中继日志,集群NDB)
一、主从复制 MySQL的主从复制(Master-Slave Replication)是一种数据冗余和高可用性的解决方案,它通过将一个或多个从服务器(Slave)与主服务器(Master)同步来实现。主从复制的基本原理是&#…...
设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析
状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变其行为,使得对象看起来好像修改了它的类。这种设计模式的核心思想是将对象的状态和行为封装成不同的状态类,通过状态对象的行为改变来避免…...
免费个人网站建设公司/百度推广官方网站
解决的问题 springboot(当然别的也可以)多环境切换需要修改配置文件硬编码,打包时不够方便。 解决: 配置文件能读取pom文件中的配置,根据命令选择不同配置注入springboot的配置文件中 pom配置文件: <…...
六灶网站建设/嘉兴网站建设方案优化
当我们的服务器某台故障的时候,我们的SCOM肯定是最早发现它的时候,但SCOM发现了以后怎么告诉IT管理员来维护呢?默认情况下肯定是需要IT管理员主动登陆到SCOM服务器上来查看其他所有服务器的运行状况,这对及时处理问题带来了延迟&a…...
网站联系我们的地图怎么做的/济南百度开户电话
1.beautifulsoup的简单使用 # 解析库:re,selenium # XML解析器 # Beatifulsoup解析库,需要配合解析器使用 # 目前主要的解析器:Python标准库,lxml HTML解析器(首选) # Beatifulsoup能给我们提供一种查找文档…...
杭州市建设信用网站/个人博客模板
2019独角兽企业重金招聘Python工程师标准>>> https://segmentfault.com/a/1190000003711146 转载于:https://my.oschina.net/daladida/blog/1785105...
樟木头镇做网站/手机如何建立网站
Oracle 体系结构(29)—— Oracle 的数据字典之(三):和用户管理有关的数据字典 Oracle 和用户管理相关的数据字典主要有三个:DBA_USERS、USER_USERS、ALL_USERS 一、DBA_USERS 该数据字典用于查询 Oracle…...
山东网站备案注销申请表/优化设计四年级上册语文答案
1、SDK:Software Development Kit,软件开发包 GUI:Graphical User Interface,图形用户接口 GDI:Graphical Derice Interface,图形设备接口 2、句柄用来标识各种资源和对象。 HANDLE:句柄 HWND&…...