朴素贝叶斯原理
在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,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 第一步: 第二步:...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
