当前位置: 首页 > news >正文

《机器学习》之贝叶斯(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 中存储以下信息&#xff1a; 配置列表&#xff08;List<Config>&#xff09;&#xff1a;存储所有配置项。总权重&#xff1a;存储所有配置的总权重。当前轮询状态&#xff1a;存储当前的轮询状态&#xff08;如当前随机值或索引&am…...

虚拟文件系统 VFS

目录 虚拟文件系统 VFS 文件系统挂载过程 虚拟文件系统 VFS 统一标准的系统调用接口&#xff1a; VFS定义了一组标准的文件操作API&#xff0c;如open(), read(), write(), close()等&#xff0c;使得用户空间的应用程序无需关心底层文件系统的具体类型。 下层文件系统必须实现…...

基于Android的民宿租赁系统的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…...

数据链路层-STP

生成树协议STP&#xff08;Spanning Tree Protocol&#xff09; 它的实现目标是&#xff1a;在包含有物理环路的网络中&#xff0c;构建出一个能够连通全网各节点的树型无环逻辑拓扑。 选举根交换机&#xff1a; 选举根端口&#xff1a; 选举指定端口&#xff1a; 端口名字&…...

OceanBase环境搭建与熟悉全攻略:开启分布式数据库探索之旅

《OceanBase环境搭建与熟悉全攻略&#xff1a;开启分布式数据库探索之旅》 在当今数字化浪潮汹涌澎湃的时代&#xff0c;数据量呈爆炸式增长&#xff0c;业务对数据库的性能、可靠性和扩展性提出了前所未有的要求。OceanBase作为一款极具创新性的分布式数据库&#xff0c;正逐…...

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系列】容器内目录显示异常的解决之道

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

echarts:dataZoom属性横向滚动条拖拽不生效

问&#xff1a; 拖拽的过程中&#xff0c;第一次向右拖拽正常&#xff0c;然后就报错&#xff1a; echarts报错&#xff1a; var pointerOption pointerShapeBuilder[axisPointerType](axis,pixeValue,otherExtent),(axis,pixeValue,otherExtent)下划线红色报错&#xff1a;…...

25/1/12 算法笔记 剖析Yolov8底层逻辑

YOLOv8 是一种基于深度学习的目标检测和图像分割模型&#xff0c;属于 YOLO&#xff08;You Only Look Once&#xff09;系列的最新版本。YOLO 系列模型以其高效的实时目标检测能力而闻名&#xff0c;YOLOv8 在此基础上进行了一些优化和改进。 Yolov8的主要特点&#xff1a; …...

Python双指针

双指针 双指针&#xff1a;在区间操作时&#xff0c;利用两个下标同时遍历&#xff0c;进行高效操作 双指针利用区间性质可以把 O ( n 2 ) O(n^2) O(n2) 时间降低到 O ( n ) O(n) O(n) 反向扫描 反向扫描&#xff1a; l e f t left left 起点&#xff0c;不断往右走&…...

1、docker概念和基本使用命令

docker概念 微服务&#xff1a;不再是以完整的物理机为基础的服务软件&#xff0c;而是借助于宿主机的性能。以小量的形式&#xff0c;单独部署的应用。 docker&#xff1a;是一个开源的应用容器引擎&#xff0c;基于go语言开发的&#xff0c;使用时apache2.0的协议。docker是…...

数据结构与算法之链表: LeetCode 92. 反转链表 II (Ts版)

反转链表 II https://leetcode.cn/problems/reverse-linked-list-ii/description/ 描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 示例 1 输入&…...

【PPTist】插入形状、插入图片、插入图表

一、插入形状 插入形状有两种情况&#xff0c;一种是插入固定的形状&#xff0c; 一种是插入自定义的形状。 插入固定的形状时&#xff0c;跟上一篇文章 绘制文本框 是一样一样的&#xff0c;都是调用的 mainStore.setCreatingElement() 方法&#xff0c;只不多传的类型不一…...

三台Centos7.9中Docker部署Redis集群

Docker部署Redis集群 1. 安装 Docker 和 Docker Compose安装 Docker&#xff1a;安装 Docker Compose&#xff1a; 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)是一种经过充分验证的研究某一特定区域共激活模式的方法&#xff0c;该方法对基于任务的功能磁共振成像(task-fMRI)数据进行种子点(seed-based)元分析。虽然MACM是一种强大…...

JavaScript-一份你的前端入门说明书(计算机专业)

一.简介 1.起源 JavaScript 起源于 1995 年,当时它主要是为了满足网页交互的需求而被创建。它最初的设计目的是为了让网页开发者能够在网页中添加一些简单的交互效果和动态内容。在那个时期,网页大多是静态的,而 JavaScript 的出现为网页带来了新的活力。Netscape 公司的 B…...

STM32供电参考设计

STM32供电参考设计 ​ 在图中有VDD&#xff0c;VSS和VDDA&#xff0c;VSSA两种类型的供电引脚&#xff0c;其数据手册解释如下&#xff1a; ​ 令我不解的是&#xff1a;VDDA和VSSA必须分别连接到VDD和VSS&#xff0c;这是什么意思&#xff1f;有大佬能够解答一下吗&#xff1f…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...