Scikit-Learn朴素贝叶斯

Scikit-Learn朴素贝叶斯

    • 1、朴素贝叶斯
      • 1.1、贝叶斯分类
      • 1.2、贝叶斯定理
      • 1.3、贝叶斯定理的推导
      • 1.4、朴素贝叶斯及原理
      • 1.5、朴素贝叶斯的优缺点
    • 2、Scikit-Learn朴素贝叶斯
      • 2.1、Sklearn中的贝叶斯分类器
      • 2.2、Scikit-Learn朴素贝叶斯API
      • 2.3、Scikit-Learn朴素贝叶斯实践(新闻分类与预测)




1、朴素贝叶斯


贝叶斯分类法是基于贝叶斯定理的统计学分类方法。它通过预测一组给定样本属于一个特定类的概率来进行分类。贝叶斯分类在机器学习知识结构中的位置如下:

在这里插入图片描述

1.1、贝叶斯分类


贝叶斯分类的历史可以追溯到18世纪,当时英国统计学家托马斯·贝叶斯发展了贝叶斯定理,这个定理为统计决策提供了理论基础。不过,贝叶斯分类得到广泛实际应用是在20世纪80年代,当时计算机技术的进步使得大规模数据处理成为可能

在众多机器学习分类算法中,贝叶斯分类和其他绝大多数分类算法都不同

例如,KNN、逻辑回归、决策树等模型都是判别方法,也就是直接学习出输出Y和特征X之间的关系,即决策函数 Y Y Y= f ( X ) f(X) f(X)或决策函数 Y Y Y= P ( Y ∣ X ) P(Y|X) P(YX)

但是,贝叶斯是生成方法,它直接找出输出Y和特征X的联合分布 P ( X , Y ) P(X,Y) P(X,Y),进而通过 P ( Y ∣ X ) P(Y|X) P(YX)= P ( X , Y ) P ( X ) \frac{P(X,Y)}{P(X)} P(X)P(X,Y)计算得出结果判定

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素贝叶斯(Naive Bayes)分类是贝叶斯分类中最简单,也是常见的一种分类方法

朴素贝叶斯算法的核心思想是通过特征考察标签概率来预测分类,即对于给定的待分类样本,求解在此样本出现的条件下各个类别出现的概率,哪个最大,就认为此待分类样本属于哪个类别

例如,基于属性和概率原则挑选西瓜,根据经验,敲击声清脆说明西瓜还不够成熟,敲击声沉闷说明西瓜成熟度好,更甜更好吃。所以,坏瓜的敲击声是清脆的概率更大,好瓜的敲击声是沉闷的概率更大。当然这并不绝对——我们千挑万选的沉闷瓜也可能并没熟,这就是噪声了。当然,在实际生活中,除了敲击声,我们还有其他可能特征来帮助判断,例如色泽、根蒂、品类等

朴素贝叶斯把类似敲击声这样的特征概率化,构成一个西瓜的品质向量以及对应的好瓜/坏瓜标签,训练出一个标准的基于统计概率的好坏瓜模型,这些模型都是各个特征概率构成的。这样,在面对未知品质的西瓜时,我们迅速获取了特征,分别输入好瓜模型和坏瓜模型,得到两个概率值。如果坏瓜模型输出的概率值更大一些,那这个瓜很有可能就是个坏瓜

1.2、贝叶斯定理


贝叶斯定理(Bayes Theorem)也称贝叶斯公式,其中很重要的概念是先验概率、后验概率和条件概率

1.2.1、先验概率

先验概率是指事件发生前的预判概率。可以是基于历史数据的统计,可以由背景常识得出,也可以是人的主观观点给出。一般都是单独事件概率

例如,如果我们对西瓜的色泽、根蒂和纹理等特征一无所知,按照常理来说,好瓜的敲声是沉闷的概率更大,假设是60%,那么这个概率就被称为先验概率

1.2.2、后验概率

后验概率是指事件发生后的条件概率。后验概率是基于先验概率求得的反向条件概率。概率形式与条件概率相同

例如,我们了解到判断西瓜是否好瓜的一个指标是纹理。一般来说,纹理清晰的西瓜是好瓜的概率更大,假设是75%,如果把纹理清晰当作一种结果,然后去推测好瓜的概率,那么这个概率就被称为后验概率

1.2.3、条件概率

条件概率是指一个事件发生后另一个事件发生的概率。一般的形式为P(B|A),表示事件A已经发生的条件下,事件B发生的概率
P ( B ∣ A ) = P ( A B ) P ( A ) P(B|A)=\frac{P(AB)}{P(A)} P(BA)=P(A)P(AB)

1.2.4、贝叶斯公式

贝叶斯公式是基于假设的先验概率与给定假设下观察到不同样本数据的概率提供了一种计算后验概率的方法。朴素贝叶斯模型依托于贝叶斯公式
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B)=\frac{P(B|A)P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

贝叶斯公式中:

  • P(A)是事件A的先验概率,一般都是人主观给定的。贝叶斯中的先验概率一般特指它
  • P(B)是事件B的先验概率,与类别标记无关,也称标准化常量,通常使用全概率公式计算得到
  • P(B|A)是条件概率,又称似然概率,一般通过历史数据统计得到
  • P(A|B)是后验概率,后验概率是我们求解的目标

由于P(B)与类别标记无关,因此估计P(A|B)的问题最后就被我们转化为基于训练数据集样本先验概率P(A)和条件概率P(B|A)的估计问题

贝叶斯公式揭示了事件A在事件B发生条件下的概率与事件B在事件A发生条件下的概率的关系

更多关于条件概率、全概率公式与贝叶斯公式的介绍详见文章:传送门

1.3、贝叶斯定理的推导


根据条件概率公式可得
P ( A B ) = P ( B ∣ A ) P ( A ) P(AB)=P(B|A)P(A) P(AB)=P(BA)P(A)

同理可得
P ( B A ) = P ( A ∣ B ) P ( B ) P(BA)=P(A|B)P(B) P(BA)=P(AB)P(B)

设事件A与事件B互相独立,即 P ( A B ) P(AB) P(AB)= P ( B A ) P(BA) P(BA),则有
P ( B ∣ A ) P ( A ) = P ( A ∣ B ) P ( B ) P(B|A)P(A)=P(A|B)P(B) P(BA)P(A)=P(AB)P(B)

由此可得贝叶斯公式
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B)=\frac{P(B|A)P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

1.4、朴素贝叶斯及原理


基于贝叶斯定理的贝叶斯模型是一类简单常用的分类算法。在假设待分类项的各个属性相互独立的前提下,构造出来的分类算法就称为朴素的,即朴素贝叶斯算法

所谓朴素,就是假定所有输入事件之间相互独立。进行这个假设是因为独立事件间的概率计算更简单,当然,也更符合我们的实际生产生活

朴素贝叶斯模型的基本思想是,对于给定的待分类项 X { x 1 , x 2 , . . . , x n } X\{{x_1,x_2,...,x_n}\} X{x1,x2,...,xn},求解在此项出现的条件下各个类别 P ( y i ∣ X ) P(y_i|X)

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

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

相关文章

爬山算法的详细介绍

目录 🍉概述 🍉 步骤 🍉 优缺点 🍈优点 🍈缺点 🍈应对策略 🍉示例 🍈旅行商问题 🍍步骤 🍍分解代码 🍎包含头文件 🍎定义函…

Cortex-M3的SysTick 定时器

目录 概述 1 SysTick 定时器 1.1 SysTick 定时器功能介绍 1.2 SysTick 定时器功能实现 1.3 SysTick在系统中的作用 2 SysTick应用的实例 2.1 建立异常服务例程 2.2 使能异常 2.3 闹钟功能 2.4 重定位向量表 2.5 消灭二次触发 3 SysTick在FreeRTOS中的应用 3.1 STM…

在docker中运行SLAM十四讲程序

《十四讲》的示例程序依赖比较多,而且系统有点旧。可以在容器中运行。 拉取镜像 docker pull ddhogan/slambook:v0.1这个docker对应的github:HomeLH/slambook2-docker 拉下来之后,假如是Windows系统,需要使用XLaunch用于提供X11…

面试大杂烩之kafka

面试这个领域最近环境不行,所以卷起来流量挺大 关于K8s 其实看我之前的博客,k8s刚有点苗头的时候我就研究过,然后工作的时候间接接触 也自己玩过 但是用的不多就忘记了,正苦于不知道写什么,水一篇 用来面试应该是够了…

C++ | Leetcode C++题解之第111题二叉树的最小深度

题目&#xff1a; 题解&#xff1a; class Solution { public:int minDepth(TreeNode *root) {if (root nullptr) {return 0;}queue<pair<TreeNode *, int> > que;que.emplace(root, 1);while (!que.empty()) {TreeNode *node que.front().first;int depth que…

huggingface 笔记:PretrainModel

1 from_pretrained 从预训练模型配置中实例化一个 PyTorch 预训练模型默认情况下&#xff0c;模型使用 model.eval() 设置为评估模式&#xff08;Dropout 模块被禁用&#xff09; 要训练模型&#xff0c;应该首先使用 model.train() 将其设置回训练模式 1.1 主要参数 pretra…

java 子类继承父类

为什么需要继承 我现在要有两个类一个 一个是小学生&#xff0c;一个是大学生 代码 小学生 package b; public class encapsulatio{public String name;public int age;public double score;public void setscore (double score) {this.scorescore;}public void testing() {S…

(三)MySQL 索引

欢迎访问 什么是索引&#xff1f; 提高查询效率的一种数据结构&#xff0c;索引是数据的目录 索引的分类 按「数据结构」分类&#xff1a;Btree索引、Hash索引、Full-text索引。按「物理存储」分类&#xff1a;聚簇索引、二级索引。按「字段特性」分类&#xff1a;主键索引…

Spring6 对 集成MyBatis 开发运用(附有详细的操作步骤)

详细实现操作步骤 具体实现内容&#xff1a;我们运用 Spring6 和 MyBatis 实现一个转账操作(该转账操作&#xff0c;进行一个事务上的控制&#xff0c;运用 MyBatis 执行 SQL 语句)。 第一步&#xff1a;准备数据库表 使用t_act表&#xff08;账户表&#xff09; 连接数据库的…

三个有意思的链表面试题的完成

上一篇博客我们已经完成了链表的所有内容&#xff0c;那么这一篇博客我们来看一下三个特别有意思的链表题目。 **第一个题目如下&#xff1a;**相信不少朋友看到这题目就已经晕了&#xff0c;那就简单说明下这个题目&#xff0c;题目就是创建一个链表&#xff0c;其中每个节点…

Android14 - 绘制系统 - 概览

从Android 12开始&#xff0c;Android的绘制系统有结构性变化&#xff0c; 在绘制的生产消费者模式中&#xff0c;新增BLASTBufferQueue&#xff0c;客户端进程自行进行queue的生产和消费&#xff0c;随后通过Transation提交到SurfaceFlinger&#xff0c;如此可以使得各进程将缓…

【vue3+elementuiplus】el-select下拉框会自动触发校验规则

场景&#xff1a;编辑弹框省份字段下拉框必填&#xff0c;触发方式change&#xff0c;有值第一次打开不会触发校验提示&#xff0c;关闭弹框再次打开触发必填校验提示&#xff0c;但是该字段有值 问题的原因是&#xff1a;在关闭弹层事件中&#xff0c;我做了resetfileds&…

SpringBoot + MybatisPlus

SpringBoot MybatisPlus 整合记录 1. 硬件软件基本信息2. 相关链接3. 通过idea快速生成一个Springboot项目4. 启动报错问题解决问题一&#xff1a;Springboot启动的时候报错提示 “没有符合条件的Bean关于Mapper类型”问题二&#xff1a;启动的时候提示需要一个Bean&#xff0…

电磁仿真--CST网格介绍

1. 简介 网格会影响仿真的准确性和速度&#xff0c;花时间理解网格化过程是很重要的。 CST 中可用的数值方法包括FIT、TLM、FEM、MoM&#xff0c;使用不同类型的网格&#xff1a; FIT和TLM&#xff1a;六面体 FEM&#xff1a;四面体、平面 MoM&#xff1a;表面 CFD&#…

深入理解与防御跨站脚本攻击(XSS):从搭建实验环境到实战演练的全面教程

跨站脚本攻击&#xff08;XSS&#xff09;是一种常见的网络攻击手段&#xff0c;它允许攻击者在受害者的浏览器中执行恶意脚本。以下是一个XSS攻击的实操教程&#xff0c;包括搭建实验环境、编写测试程序代码、挖掘和攻击XSS漏洞的步骤。 搭建实验环境 1. 安装DVWA&#xff…

【408真题】2009-16

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

推荐一个快速开发接私活神器

文章目录 前言一、项目介绍二、项目地址三、功能介绍四、页面显示登录页面菜单管理图表展示定时任务管理用户管理代码生成 五、视频讲解总结 前言 大家好&#xff01;我是智航云科技&#xff0c;今天为大家分享一个快速开发接私活神器。 一、项目介绍 人人开源是一个提供多种…

Golang | Leetcode Golang题解之第112题路径总和

题目&#xff1a; 题解&#xff1a; func hasPathSum(root *TreeNode, sum int) bool {if root nil {return false}if root.Left nil && root.Right nil {return sum root.Val}return hasPathSum(root.Left, sum - root.Val) || hasPathSum(root.Right, sum - roo…

C++常见知识点总结

常见字符 * 注释&#xff1a;/* 这是一个注释*/乘法&#xff1a;a * b取值运算符&#xff1a;*指针变量&#xff0c;int a 4&#xff0c;*a &#xff1f;&#xff1f;&#xff1f;&#xff1f;指针变量&#xff1a;数据类型 *变量名&#xff0c; int *no &bh&#xff0…

SAP揭秘者-怎么执行生产订单ATP检查及其注意点

文章摘要&#xff1a; 上篇文章给大家介绍生产订单ATP检查的相关后台配置&#xff0c;大家可以按照配置步骤去进行配置&#xff0c;配置完之后&#xff0c;我们接下来就是要执行ATP检查。本篇文章具体给大家介绍怎么来执行生产 订单ATP检查及其注意点。 执行生产订单ATP检查的…