【Python】贝叶斯,条件概率是怎么回事儿

news2025/4/8 22:01:44

【Python】贝叶斯,条件概率是怎么回事儿

  • 一、原理简介
    • 1.1 贝叶斯定理
    • 1.2 朴素贝叶斯假设
  • 二、算法实现过程
    • 2.1 数据准备与预处理
    • 2.2 模型训练与预测
      • 2.2.1 高斯朴素贝叶斯 - 对应连续型数据
      • 2.2.2 多项式朴素贝叶斯 - 离散型数据
    • 2.3 模型评估
  • 三、算法优缺点分析
    • 3.1 核心优势
    • 3.2 主要局限
  • 四、典型应用场景
  • 五、完整实现示例:垃圾邮件分类

一、原理简介

1.1 贝叶斯定理

在这里插入图片描述

贝叶斯定理是概率论中的核心公式,用于计算在已知某些条件下事件发生的后验概率,即我们常说的条件概率(面试会考哦):
P(A∣B)= P(B∣A)⋅P(A) / P(B)

其中:

  • P(A∣B) 是后验概率(已知B发生时的A概率)
  • P(B∣A) 是似然概率(已知A发生时B的条件概率)
  • P(A) 是先验概率(A的独立发生概率)
  • P(B) 是边际概率(B的总发生概率)

1.2 朴素贝叶斯假设

朴素贝叶斯算法基于特征条件独立性假设,即所有特征在类别确定的条件下相互独立。
这一简化使得计算复杂度显著降低划重点),适用于高维数据场景。

二、算法实现过程

在这里插入图片描述

2.1 数据准备与预处理

还是老样子,咱们使用Scikit-learn库加载鸢尾花数据集,并进行标准化处理:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split   # 数据集划分
from sklearn.preprocessing import StandardScaler       # 数据标准化处理

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 标准化处理数据 便于后续处理 
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

2.2 模型训练与预测

2.2.1 高斯朴素贝叶斯 - 对应连续型数据

from sklearn.naive_bayes import GaussianNB   # 高斯朴素贝叶斯

# 创建模型
gnb = GaussianNB()

# 训练与预测
gnb.fit(X_train, y_train)
y_pred = gnb.predict(X_test)

2.2.2 多项式朴素贝叶斯 - 离散型数据

from sklearn.naive_bayes import MultinomialNB  # 多项式朴素贝叶斯

# 文本分类示例(需先进行词袋向量化)
from sklearn.feature_extraction.text import CountVectorizer 

texts = ["free investment", "normal message", "urgent promotion"]
vectorizer = CountVectorizer()
X_text = vectorizer.fit_transform(texts)

mnb = MultinomialNB()
mnb.fit(X_text, [1, 0, 1])  # 1:垃圾邮件,0:正常邮件

2.3 模型评估

from sklearn.metrics import accuracy_score, classification_report  # 分析评估报告生成

# 计算准确率
print(f"准确率: {accuracy_score(y_test, y_pred):.2%}")

# 输出分类报告
print(classification_report(y_test, y_pred, target_names=iris.target_names))

三、算法优缺点分析

3.1 核心优势

  • ​计算效率高:时间复杂度为O(n⋅d),适合高维数据(如文本分类)
  • ​增量学习能力:支持在线学习,新数据可直接更新概率分布
  • ​抗噪声能力强:对小规模数据仍能保持较好性能

3.2 主要局限

  • 独立性假设缺陷:实际场景中特征往往存在相关性
  • 零概率问题:未出现的特征组合会导致概率估计失效(可通过拉普拉斯平滑解决)
  • 先验敏感度:先验概率的选择显著影响结果准确性

四、典型应用场景

领域应用实例适用算法类型
自然语言处理垃圾邮件过滤、情感分析多项式朴素贝叶斯
生物医学疾病诊断、基因分类高斯朴素贝叶斯
推荐系统用户兴趣预测贝叶斯网络
金融风控欺诈检测层次贝叶斯模型
图像处理手写数字识别伯努利朴素贝叶斯

五、完整实现示例:垃圾邮件分类

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline

# 构建示例数据集
data = {
    'text': ['free lottery', 'meeting notes', 'win cash now', 'project update'],
    'label': [1, 0, 1, 0]  # 1:垃圾邮件,0:正常邮件
}
df = pd.DataFrame(data)

# 创建处理管道
model = make_pipeline(
    TfidfVectorizer(stop_words='english'),
    MultinomialNB(alpha=0.1)
)

# 训练模型
model.fit(df['text'], df['label'])

# 预测新样本
test_emails = ["urgent money offer", "weekly report"]
predictions = model.predict(test_emails)
print(f"预测结果: {predictions}")  # 输出: [1 0]

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

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

相关文章

Flink介绍——实时计算核心论文之Storm论文详解

引入 我们通过以下两篇文章,深入探索了S4是如何抽象流式计算模型,如何设计架构和系统,存在那些局限: 论文详解论文总结 Yahoo推出的S4 并没有在历史舞台上站稳脚跟,在S4的论文发表的同一年,我们今天的主…

001 使用单片机实现的逻辑分析仪——吸收篇

本内容记录于韦东山老师的毕设级开源学习项目,含个人观点,请理性阅读。 个人笔记,没有套路,一步到位,欢迎交流! 00单片机的逻辑分析仪与商业版FPGA的逻辑分析仪异同 对比维度自制STM32逻辑分析仪商业版逻…

11-产品经理-创建产品

在“产品”-“仪表盘”内,可以查看系统中关于产品及相关需求的统计。 在“产品”-“产品列表”页面,可以按项目集、项目查看其关联产品。还可以添加产品、编辑产品线、或者导出产品列表。 产品看板,通过看板方式查看产品、产品计划和产品下的…

低代码开发平台:飞帆制作网页并集成到自己的网页中

应用场景: 有时,我们的网页使用了某个模版,或者自己写的 html、css、javascript 代码。只是网页中的一部分使用飞帆来制作。这样的混合网页如何实现呢? 其实很容易,来体验一下飞帆提供的功能! 还记得这个…

语法: result=log (x);

LOG( ) 语法: resultlog (x); 参数: x是一个浮点数; 返回值: result等于返回值,是一个浮点数; 功能: 该函数是用来计算浮点数x的自然对数(即ln x);如果x小于或等于0,或x太大,则行为没有定义; 注意:存在error挂起; 如果在编写程序里包含了errno.h头文件,则范围和等级…

Hibernate核心方法总结

Session中的核心方法梳理 1、save方法 这个方法表示将一个对象保存到数据库中,可以将一个不含OID的new出来的临时对象转换为一个处于Session缓存中具有OID的持久化对象。 需要注意的是:在save方法前设置OID是无效的但是也不会报错,在save方…

IntelliJ IDEA Maven 工具栏消失怎么办?

一、问题现象与背景 在使用 IntelliJ IDEA(简称 IDEA)开发 Maven 项目时,偶尔会遇到右侧或侧边栏的 Maven 工具栏(显示依赖、生命周期等信息的窗口)突然消失的情况。这可能影响开发者快速操作 Maven 构建、依赖管理等…

消息队列(kafka 与 rocketMQ)

为什么要使用消息队列?作用1: 削峰填谷(突发大请求量问题)作用2: 解耦(单一原则)作用3: 异步(减少处理时间) 如何选择消息队列(kafka&RocketMQ)成本功能性能选择 rocketMQ是参考kafka进行实现的为什么rocketMQ与kafka性能差距很大呢?kafka 的底层数据储存实现rocketMQ 的…

【STM32】Flash详解

【STM32】Flash详解 文章目录 【STM32】Flash详解1.Flash闪存概念1. 1核心区别:NOR Flash vs. NAND Flash1.2 为什么常说的“Flash”多指 NAND Flash?1.3技术细节对比(1) 存储单元结构(2) 应用场景(3) 可靠性要求 1.4总结 2.STM32内部的Flash2.1为什么是…

CV - 目标检测

物体检测 目标检测和图片分类的区别: 图像分类(Image Classification) 目的:图像分类的目的是识别出图像中主要物体的类别。它试图回答“图像是什么?”的问题。 输出:通常输出是一个标签或一组概率值&am…

node-modules-inspector 可视化node_modules

1、node_modules 每个vue的项目都有很多的依赖,有的是dev的,有的是生产的。 2、使用命令pnpx node-modules-inspector pnpx node-modules-inspector 3、node_modules可视化 4、在线体验 Node Modules Inspector 5、github地址 https://github.com/a…

远程服务器下载llama模型

适用于有防火墙不能直接从HF上下载的情况 然后,你可以克隆 Llama-3.1-8B-Instruct 模型: git clone https://你的用户名:你的访问令牌hf-mirror.com/meta-llama/Llama-3.1-8B-Instruct用户名,令牌来自huggingface官网 注意:要提…

2011-2019年各省地方财政金融监管支出数据

2011-2019年各省地方财政金融监管支出数据 1、时间:2007-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政金融监管支出 4、范围:31省 5、指标说明:地方财政在金融监管方面的支出…

Java大厂面试题 -- JVM 优化进阶之路:从原理到实战的深度剖析(2)

最近佳作推荐: Java大厂面试题 – 深度揭秘 JVM 优化:六道面试题与行业巨头实战解析(1)(New) 开源架构与人工智能的融合:开启技术新纪元(New) 开源架构的自动化测试策略优…

存储引擎 / 事务 / 索引

1. 存储引擎 MySQL 中特有的术语。 (Oracle 有,但不叫这个名字) 是一种表存储 / 组织数据的方式 不同的存储引擎,表存储数据的方式不同 1.1 查看存储引擎 命令: show engines \g(或大写:G…

RabbitMQ运维

RabbitMQ运维 一.集群1.简单介绍2.集群的作用 二.搭建集群1.多机多节点搭建步骤 2.单机单节点搭建步骤 3.宕机演示 三.仲裁队列1.简单介绍2.Raft协议Raft基本概念主节点选举选举过程 3.仲裁队列的使用 四.HAProxy负载均衡1.安装HAProxy2.HAProxy的使用 一.集群 1.简单介绍 Ra…

Ansible 实战:Roles,运维的 “魔法函数”

一、介绍 你现在已经学过tasks和handlers,那么,最好的playbook组织方式是什么呢?答案很简单:使用roles!roles基于一种已知的文件结构,能够自动加载特定的vars_files、tasks以及handlers。通过roles对内容进…

关于JVM和OS中的指令重排以及JIT优化

关于JVM和OS中的指令重排以及JIT优化 前言: 这东西应该很重要才对,可是大多数博客都是以讹传讹,全是错误,尤其是JVM会对字节码进行重排都出来了,明明自己测一测就出来的东西,写出来误人子弟… 研究了两天&…

在CPU服务器上部署Ollama和Dify的过程记录

在本指南中,我将详细介绍如何在CPU服务器上安装和配置Ollama模型服务和Dify平台,以及如何利用Docker实现这些服务的高效部署和迁移。本文分为三大部分:Ollama部署、Dify环境配置和Docker环境管理,适合需要在本地或私有环境中运行A…

【计网】TCP 协议详解 与 常见面试题

三次握手、四次挥手的常见面试题 不用死记,只需要清楚三次握手,四次挥手的流程,回答的时候心里要记住,假设网络是不可靠的 问题(1):为什么关闭连接时需要四次挥手,而建立连接却只要三次握手? 关…