朴素贝叶斯原理
在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(X)Y=f(X), 要么是条件分布P(Y|X)P(Y|X)。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布P(X,Y)P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)P(Y|X)=P(X,Y)/P(X)得出。
1. 定义
先验概率:
在考虑任何新证据之前,基于已有知识或经验对事件发生的概率估计。
例如,在疾病检测中,某疾病的发病率 P(D)就是先验概率。
后验概率:
在观察到新证据后,更新的事件发生概率。
例如,在疾病检测中,已知检测结果为阳性后,患病的概率 P(D∣T)就是后验概率。
2. 数学表达
先验概率:P(Y)
表示事件 Y 在没有任何额外信息下的概率。
后验概率:P(Y∣X)
表示在观察到证据 X 后,事件 Y 的条件概率。
首先,这个名字里的“朴素”是指它做了某种简化的假设。那贝叶斯部分肯定和贝叶斯定理有关。贝叶斯定理是条件概率相关的,所以这个算法是基于条件概率进行分类的。
那贝叶斯定理的公式是什么呢?是P(A|B) = P(B|A) * P(A) / P(B)。也就是说,在B发生的条件下,A发生的概率等于A发生的概率乘以在A发生的条件下B发生的概率,再除以B发生的总体概率。
可是,为什么叫“朴素”呢?应该是因为它在计算的时候做了一些假设来简化问题。假设特征之间是相互独立的,也就是特征之间没有关联。这样在计算联合概率的时候,可以拆分成各个特征概率的乘积,而不需要考虑复杂的条件依赖关系。虽然这在现实中可能不成立,但这样的简化可以让计算变得可行,尤其是当特征数量很多的时候。
朴素贝叶斯分类器具体是怎么工作的呢?
比如说,用天气情况预测是否去打网球。特征可能是天气、温度、湿度、风况等,每个特征有不同的取值,类别是去或不去。训练数据中统计每种特征在去和不去的情况下的条件概率,然后当有一个新的天气情况出现时,计算后验概率,选择较大的那个类别作为预测结果。这时候如果假设各个天气特征之间独立,那么就可以用朴素贝叶斯来分类了。
不过,这里可能要注意处理零概率的问题。比如,如果特征在训练数据中的某个类别里从未出现,那么它的条件概率就会是零,这样整个乘积也会是零,这显然不合理。这时候可能需要用拉普拉斯平滑或者其他方法来调整概率估计,避免零值出现。
应用场景除了文本分类,还有哪些呢?
比如情感分析、垃圾邮件过滤、新闻分类、推荐系统,或者医疗诊断中的分类问题,只要特征可以被合理地独立看待,或者即使不独立但影响不大的情况下,都可以尝试使用朴素贝叶斯。
具体来说训练的过程。先统计每个类别下各个特征的条件概率,以及每个类别的先验概率。比如,先计算垃圾邮件的比例作为先验概率P(垃圾),然后对于每个单词,计算在垃圾邮件中出现的概率P(单词|垃圾),同理正常邮件的概率P(单词|正常)。当有一个新邮件来的时候,里面包含了一些单词,那么就计算P(垃圾)乘以所有单词在垃圾邮件中的条件概率的乘积,同样的计算正常邮件的,然后比较两者的大小,选择较大的那个作为分类结果。
朴素贝叶斯的优缺点是什么呢?
优点:
- 简单、高效,尤其是在高维数据中,比如文本分类,特征数量可能成千上万,但朴素贝叶斯仍然可以处理。而且训练速度很快,因为只需要计算各个概率,不需要复杂的迭代优化过程。
- 它对缺失数据不太敏感,如果某个特征在测试数据中没有出现,可以忽略或者用默认值处理。
缺点:
- 主要是特征条件独立的假设,在现实中往往不成立,比如在文本中,某些词之间可能存在关联,这时候模型可能无法捕捉到这些关系,导致准确率下降。
- 虽然可以通过平滑处理零概率问题,但如果训练数据不足或者分布不均匀,可能对先验概率的依赖较大,影响结果。
拉普拉斯平滑,是一种在概率估计中常用的平滑技术,主要用于处理概率为零的问题。它在朴素贝叶斯分类器、语言模型等场景中被广泛应用,尤其是在处理文本数据时,能够有效避免因某些特征在训练集中未出现而导致的概率为零的问题。
拉普拉斯平滑的核心思想是为每个概率估计加上一个非零的常数(通常是1),以避免零概率问题。具体来说,对于一个离散随机变量 X,其取值范围为 {x1,x2,…,xk},假设我们有 N 个观测值,其中 ni 是 xi 出现的次数。那么,拉普拉斯平滑后的概率估计为:
P(X=xi)=N+kni+1
为什么使用拉普拉斯平滑
避免零概率问题:在实际应用中,尤其是文本数据处理中,某些特征可能在训练集中未出现,但它们在测试集中可能会出现。拉普拉斯平滑通过为每个特征加上一个非零的平滑参数,确保所有特征的概率估计都不为零。
提高模型的鲁棒性:通过平滑处理,模型对未见过的数据有更好的适应性,从而提高模型的泛化能力。
简单易实现:拉普拉斯平滑的实现非常简单,只需在计数时加上一个常数即可。
相关文章:

朴素贝叶斯原理
在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么…...
k8s中,一.pod污点,二.pod容器污点容忍策略,三.pod优先级(PriorityClass类)
一.pod污点:污点是让节点与pod产生排斥的一类规则污点标签的命令1.查看污点标签kubectl describe nodes 节点名2.设置污点标签kubectl taint node 节点名 key值value值:污点标签种类3.删除污点标签kubectl taint node 节点名 key值value值:污点标签种类-4.污点标签种类驱逐:NoE…...

【重生之学习C语言----水仙花篇】
目录 编辑 ----------------------------------------begin-------------------------------------- 一、什么是水仙花数? 二、问题分析 确定数字的位数:计算输入数字的位数 n。 分离每一位数字:例如将 153 分离为 1、5、3。 计算各…...

两步构建 AI 总结助手,实现智能文档摘要
在信息极度丰富的当下,如何从海量且复杂的文件资料中筛选出关键内容,成为了不少企业和个人急需解决的问题。本次解决方案将向您介绍,如何通过函数计算 FC 阿里云百炼平台搭建智能 AI 总结助手,实现高效的文本自动总结和信息提取。…...

承压金字塔(蓝桥杯17C)
文件读取,与写入:C 文件和流 | 菜鸟教程 #include <iostream> #include <fstream> #include <string> using namespace std; double sum[30][30]; int main() {ifstream infile("C:\\Users\\xutianci\\OneDrive\\Desktop\\TMOCC\…...
day33-数据同步rsync
一、Rsync本地模式和远程模式 纯通过rsync的命令,来实现,数据目录A 拷贝到数据目录B 也就是模拟cp的用法 很简单 1.安装 yum install rsync -y 2.命令语法,分几个模式 - 本地模式 rsync 参数 源路径 目标路径 rsync -xxxxx /var…...
Android 实现首页Tab切换并且支持懒加载功能详解
目录 1. 添加依赖2. 布局文件3. 创建 Fragment4. 创建适配器5. 在 MainActivity 中设置 TabLayout 和 ViewPager2 1. 添加依赖 在 build.gradle 文件中添加以下依赖: implementation androidx.viewpager2:viewpager2:1.1.0-beta01 implementation com.google.andr…...

[Android] 360行车记录仪谷歌版
[Android] 360行车记录仪谷歌版 链接:https://pan.xunlei.com/s/VOIQYq-jmW8Jpb8y3EIA3YdtA1?pwd3abw# 新买的360行车记录仪,配套软件让安装360智慧生活软件,二百多兆,各种功能齐全、忒齐全,好多用不到,…...
基于Redis分布式锁
1. 获取锁的过程 使用SETNX命令:SETNX(SET if Not eXists)是一个原子操作,它会在指定的key不存在时,将key的值设置为给定的value,并返回1;如果key已经存在,则不做任何操作࿰…...
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
在 Spring Boot 项目中,有时候我们希望根据配置文件中的某个属性值来决定是否启用某个功能或加载某个组件。此时,ConditionalOnProperty 注解就可以发挥作用。它通过配置文件的属性值控制 Bean 或配置类的加载,使得我们的程序更具灵活性。 本…...
canny边缘检测
Canny边缘检测算法是一种广泛使用的边缘检测方法,由John F.Canny在1986年提出。它被认为是边缘检测的“黄金标准”,因为它在检测边缘的同时能够很好地抑制噪声,并且能够精确地定位边缘。Canny算法通过一系列步骤来实现鲁棒的边缘检测…...

团建 蓝桥杯省a 15
问题描述 小蓝正在和朋友们团建,有一个游戏项目需要两人合作,两个人分别拿到一棵大小为 nn 和 mm 的树,树上的每个结点上有一个正整数权值。 两个人需要从各自树的根结点 1 出发走向某个叶结点,从根到这个叶结点的路径上经过的所…...
【逻辑学导论】1.6 有效性和真实性
当一个演绎论证成功地将结论和前提必然地联系起来,它是有效的。有效性是针对论证的各命题之间的关系而言的。一个论证是有效的,当且仅当它不可能有真前提和假结论,当且仅当其结论是从其前提逻辑必然地推导出来的。因此,有效性永远…...

IDEA 中集成 Maven,配置环境、创建以及导入项目
目录 在 IntelliJ IDEA 中集成 Maven 并配置环境 1. 打开 IDEA 设置 2. 定位 Maven 配置选项 3. 配置 Maven 路径 4. 应用配置 创建 Maven 项目 1. 新建项目 2. 选择项目类型 3. 配置项目信息 4. 确认 Maven 设置 5. 完成项目创建 导入 Maven 项目 1. 打开导入窗口…...

Qt跨屏窗口的一个Bug及解决方案
如果我们希望一个窗口覆盖用户的整个桌面,此时就要考虑用户有多个屏幕的场景(此窗口要横跨多个屏幕),由于每个屏幕的分辨率和缩放比例可能是不同的,Qt底层在为此窗口设置缩放比例(DevicePixelRatio…...
Vue WebSocket简单应用 ws
webSocket应用 <template><div></div> </template><script> import { getToken } from "/utils/auth"; export default {data() {return {url: "",Socket: null, //socket对象lockReconnect: false, //锁定拒绝重连close: …...

快速单机部署ollama v0.5.7 +openwebui(免去网络环境干扰)
1 概述 本文介绍在一台机器上快速部署测试ollama和openwebui,免去国内网络环境的干扰。 2 环境 2.1 环境 版本信息如下: a、操作系统:centos 7.9 c、docker版本:20.10.5-3 3 部署 3.1 安装docker yum install -y yum-util…...
【华为OD-E卷 - 114 找最小数 100分(python、java、c++、js、c)】
【华为OD-E卷 - 找最小数 100分(python、java、c、js、c)】 题目 给一个正整数NUM1,计算出新正整数NUM2,NUM2为NUM1中移除N位数字后的结果,需要使得NUM2的值最小 输入描述 输入的第一行为一个字符串,字…...

快速搭建GPU环境 | docker、k8s中使用gpu
目录 一、裸机部署安装 GPU Driver安装 CUDA Toolkit测试 二、Docker 环境安装 nvidia-container-toolkit配置使用该 runtime 三、 k8s 环境安装 device-plugin安装 GPU 监控 一、裸机部署 裸机中要使用上 GPU 需要安装以下组件: GPU DriverCUDA Toolkit 二者的关…...

VSCode设置——通过ctrl+鼠标滚动改变字体大小(新版本的vs)
"editor.mouseWheelZoom": true 第一步: 第二步:...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...