朴素贝叶斯 (Naive Bayes)
朴素贝叶斯 (Naive Bayes)
通俗易懂算法
朴素贝叶斯(Naive Bayes)是一种基于概率统计的分类算法。它的核心思想是通过特征的条件独立性假设来简化计算复杂度,将复杂的联合概率分布分解为特征的独立概率分布之积。
基本思想
朴素贝叶斯基于贝叶斯定理,其公式为:
P ( C ∣ X ) = P ( X ∣ C ) ⋅ P ( C ) P ( X ) P(C \mid X) = \frac{P(X \mid C) \cdot P(C)}{P(X)} P(C∣X)=P(X)P(X∣C)⋅P(C)
- P ( C ∣ X ) P(C \mid X) P(C∣X) 是给定特征 X X X 时类别 C C C 的后验概率。
- P ( X ∣ C ) P(X \mid C) P(X∣C) 是在类别 C C C 下观测到特征 X X X 的似然概率。
- P ( C ) P(C) P(C) 是类别 C C C 的先验概率。
- P ( X ) P(X) P(X) 是特征 X X X 的概率,可以被认为是一个常数,因为对于每个待分类的样本来说, X X X 是已知的。
由于在实际计算中, P ( X ) P(X) P(X) 对于所有类别都是相同的,故可以在分类决策中去掉这一项,简化为只计算分子部分:
P ( C ∣ X ) ∝ P ( X ∣ C ) ⋅ P ( C ) P(C \mid X) \propto P(X \mid C) \cdot P(C) P(C∣X)∝P(X∣C)⋅P(C)
朴素独立假设
朴素贝叶斯算法假设特征之间相互独立,这么做是为了简化似然项 P ( X ∣ C ) P(X \mid C) P(X∣C) 的计算:
P ( X ∣ C ) = P ( x 1 , x 2 , … , x n ∣ C ) = ∏ i = 1 n P ( x i ∣ C ) P(X \mid C) = P(x_1, x_2, \ldots, x_n \mid C) = \prod_{i=1}^{n} P(x_i \mid C) P(X∣C)=P(x1,x2,…,xn∣C)=i=1∏nP(xi∣C)
这里, x 1 , x 2 , … , x n x_1, x_2, \ldots, x_n x1,x2,…,xn 是特征向量 X X X 的各个属性(特征)。
分类决策
对于一个待分类的样本,计算每个类别的概率:
P ( C ∣ X ) ∝ P ( C ) ∏ i = 1 n P ( x i ∣ C ) P(C \mid X) \propto P(C) \prod_{i=1}^{n} P(x_i \mid C) P(C∣X)∝P(C)i=1∏nP(xi∣C)
选择概率最大的类别作为样本的预测分类。
应用及优点
朴素贝叶斯算法广泛用于文本分类(如垃圾邮件过滤)等领域,主要优点包括:
- 简单高效:算法实现简单,计算速度快。
- 对小规模数据表现良好:对数据量需求不高,但大量数据时性能更优。
- 能处理多类别问题:适合多元分类。
当然,朴素贝叶斯也有其局限性,主要在于它的独立性假设在实际应用中可能并不成立,因此在某些条件下可能导致精度下降。不过,有时即使独立性假设不完全成立,算法仍然能够提供相当好的结果。
底层原理
朴素贝叶斯(Naive Bayes)算法是一种基于贝叶斯定理的简单且强大的分类算法。在数学原理层面,其核心在于利用条件概率来进行分类。
贝叶斯定理
贝叶斯定理是条件概率的一个基本公式。对于事件 A A A 和 B B B,贝叶斯定理可以表示为:
P ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) P ( B ) P(A | B) = \frac{P(B | A) \cdot P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)⋅P(A)
在分类问题中,我们通常关注特征集 X = ( X 1 , X 2 , … , X n ) \mathbf{X} = (X_1, X_2, \ldots, X_n) X=(X1,X2,…,Xn) 和类别变量 C C C,那么贝叶斯定理可以用于计算一个给定实例属于类别 c k c_k ck 的概率:
P ( C = c k ∣ X = x ) = P ( X = x ∣ C = c k ) ⋅ P ( C = c k ) P ( X = x ) P(C = c_k | \mathbf{X} = \mathbf{x}) = \frac{P(\mathbf{X} = \mathbf{x} | C = c_k) \cdot P(C = c_k)}{P(\mathbf{X} = \mathbf{x})} P(C=ck∣X=x)=P(X=x)P(X=x∣C=ck)⋅P(C=ck)
朴素性假设
朴素贝叶斯算法的 “朴素” 来自于对特征之间的独立性假设,即假设每个特征在给定类别的条件下都是独立的。假设特征独立,我们可以将联合概率简化为各个特征概率的乘积:
P ( X = x ∣ C = c k ) = ∏ i = 1 n P ( X i = x i ∣ C = c k ) P(\mathbf{X} = \mathbf{x} | C = c_k) = \prod_{i=1}^{n} P(X_i = x_i | C = c_k) P(X=x∣C=ck)=i=1∏nP(Xi=xi∣C=ck)
朴素贝叶斯分类
朴素贝叶斯分类的任务是找到使后验概率最大的类别:
c ^ = arg max c k P ( C = c k ∣ X = x ) \hat{c} = \arg\max_{c_k} P(C = c_k | \mathbf{X} = \mathbf{x}) c^=argckmaxP(C=ck∣X=x)
通过贝叶斯定理,上述表达式可以变为:
c ^ = arg max c k P ( C = c k ) ⋅ ∏ i = 1 n P ( X i = x i ∣ C = c k ) P ( X = x ) \hat{c} = \arg\max_{c_k} \frac{P(C = c_k) \cdot \prod_{i=1}^{n} P(X_i = x_i | C = c_k)}{P(\mathbf{X} = \mathbf{x})} c^=argckmaxP(X=x)P(C=ck)⋅∏i=1nP(Xi=xi∣C=ck)
由于对于每个类别 c k c_k ck,分母 P ( X = x ) P(\mathbf{X} = \mathbf{x}) P(X=x) 是相同的,因此最大化后验概率等价于最大化分子部分:
c ^ = arg max c k P ( C = c k ) ⋅ ∏ i = 1 n P ( X i = x i ∣ C = c k ) \hat{c} = \arg\max_{c_k} P(C = c_k) \cdot \prod_{i=1}^{n} P(X_i = x_i | C = c_k) c^=argckmaxP(C=ck)⋅i=1∏nP(Xi=xi∣C=ck)
例子
现实中, P ( C = c k ) P(C = c_k) P(C=ck) 和 P ( X i = x i ∣ C = c k ) P(X_i = x_i | C = c_k) P(Xi=xi∣C=ck) 可以通过训练数据进行估计。例如, P ( C = c k ) P(C = c_k) P(C=ck) 可以通过计算类别 c k c_k ck 出现的相对频率来估计,而 P ( X i = x i ∣ C = c k ) P(X_i = x_i | C = c_k) P(Xi=xi∣C=ck) 则可以根据已知 C = c k C = c_k C=ck 的情况下特征 X i X_i Xi 的频率来估计。
总结
朴素贝叶斯算法尽管假设特征独立,但在许多实际应用中表现良好。其简洁、有效的特性在文本分类、垃圾邮件过滤和推荐系统等多个领域中得到广泛应用。
常用面试考点
朴素贝叶斯(Naive Bayes)算法是常用于分类任务的简单而有效的概率模型。它基于贝叶斯定理,假设特征之间是条件独立的(即“朴素”的假设)。下面从面试常考点的角度来解析朴素贝叶斯算法:
1. 贝叶斯定理
朴素贝叶斯分类器基于贝叶斯定理,公式如下:
P ( C k ∣ x ) = P ( x ∣ C k ) ⋅ P ( C k ) P ( x ) P(C_k | x) = \frac{P(x | C_k) \cdot P(C_k)}{P(x)} P(Ck∣x)=P(x)P(x∣Ck)⋅P(Ck)
其中:
- P ( C k ∣ x ) P(C_k | x) P(Ck∣x) 是给定特征向量 x x x 属于类别 C k C_k Ck 的后验概率。
- P ( x ∣ C k ) P(x | C_k) P(x∣Ck) 是在类别 C k C_k Ck 下观测到特征向量 x x x 的似然。
- P ( C k ) P(C_k) P(Ck) 是类别 C k C_k Ck 的先验概率。
- P ( x ) P(x) P(x) 是观测到特征向量 x x x 的概率。
2. 朴素假设
朴素贝叶斯的关键假设是特征之间是条件独立的。对于一个包含 n n n个特征的特征向量 x = ( x 1 , x 2 , … , x n ) x = (x_1, x_2, \ldots, x_n) x=(x1,x2,…,xn),有:
P ( x ∣ C k ) = P ( x 1 , x 2 , … , x n ∣ C k ) = ∏ i = 1 n P ( x i ∣ C k ) P(x | C_k) = P(x_1, x_2, \ldots, x_n | C_k) = \prod_{i=1}^{n} P(x_i | C_k) P(x∣Ck)=P(x1,x2,…,xn∣Ck)=i=1∏nP(xi∣Ck)
这种假设极大地简化了计算过程,但在某些情况下显得过于简单。
3. 分类决策
在朴素贝叶斯分类器中,我们通过选择最大后验概率的类别作为样本的预测类别:
C predict = arg max C k P ( C k ∣ x ) = arg max C k P ( x ∣ C k ) ⋅ P ( C k ) C_{\text{predict}} = \arg\max_{C_k} P(C_k | x) = \arg\max_{C_k} P(x | C_k) \cdot P(C_k) Cpredict=argCkmaxP(Ck∣x)=argCkmaxP(x∣Ck)⋅P(Ck)
因为 P ( x ) P(x) P(x) 为常数,对所有类别一致,因此在比较时可以忽略。
4. 具体实现
根据特征的类型,朴素贝叶斯有不同的实现方法:
- 高斯朴素贝叶斯:适用于连续值特征,假设特征服从正态分布。
- 多项式朴素贝叶斯:适用于离散特征,尤其是文本分类中的词袋模型。
- 伯努利朴素贝叶斯:特征是二元变量(0/1),适合处理命中与不命中特征。
5. 优缺点
优点:
- 算法简单,易于实现。
- 对小规模数据表现良好,适合文本分类。
- 预测过程快速,所需估计的参数较少。
缺点:
- 特征之间独立性的假设在某些情况下不成立,可能影响算法的性能。
- 需要足够的样本来准确估计概率。
6. 面试常见问题
-
如何处理连续特征?
- 使用高斯朴素贝叶斯,将特征视为正态分布。
-
在实践中,如何处理特征之间的相关性?
- 选择合适的特征组合,或者在假设不成立影响严重的情况下考虑更复杂的模型。
-
如何解决样本先验概率过低的问题?
- 使用拉普拉斯平滑(Laplace Smoothing)来避免零概率。
补充一个很好的视频:贝叶斯直观理解
相关文章:
朴素贝叶斯 (Naive Bayes)
朴素贝叶斯 (Naive Bayes) 通俗易懂算法 朴素贝叶斯(Naive Bayes)是一种基于概率统计的分类算法。它的核心思想是通过特征的条件独立性假设来简化计算复杂度,将复杂的联合概率分布分解为特征的独立概率分布之积。 基本思想 朴素贝叶斯基于…...

高德2.0 多边形覆盖物无法选中编辑
多边形覆盖物无法选中编辑。先检查一下数据的类型得是<number[]>,里面是字符串的虽然显示没问题,但是不能选中编辑。 (在项目中排查了加载时机,事件监听…等等种种原因,就是没发现问题。突然想到可能是数据就有问题…...

时序最佳入门代码|基于pytorch的LSTM天气预测及数据分析
前言 在本篇文章,我们基于pytorch框架,构造了LSTM模型进行天气预测,并对数据进行了可视化分析,非常值得入门学习。该数据集提供了2013年1月1日至2017年4月24日在印度德里市的数据。其中包含的4个参数是平均温度(meant…...
85-MySQL怎么判断要不要加索引
在MySQL中,决定是否为表中的列添加索引通常基于查询性能的考量。以下是一些常见的情况和策略: 查询频繁且对性能有影响的列:如果某个列经常用于查询条件,且没有创建索引,查询性能可能会下降。 在WHERE、JOIN和ORDER B…...
车载软件架构 --- SOA设计与应用(中)
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

MATLAB求解微分方程和微分方程组的详细分析
目录 引言 微分方程的定义 MATLAB求解常微分方程 参数分析: MATLAB求解偏微分方程 刚性和非刚性问题 总结 引言 微分方程在物理、工程、经济和生物等多个领域有着广泛的应用。它们用于描述系统中变量与其导数之间的关系,通过这些方程可以解释和预…...

Sybase「退役」在即,某公共卫生机构如何实现 SAP Sybase 到 PostgreSQL 的持续、无缝数据迁移?
使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC 流处理 数据集成」组合拳,加速仓内数据流转,帮助企业…...
如何通过Chrome浏览器轻松获取视频网站的TS文件
在当今这个信息爆炸的时代,视频内容成为了我们获取知识和娱乐的重要方式。然而,许多视频网站出于版权保护等原因,往往限制用户直接下载视频。今天,我将教你如何利用Chrome浏览器轻松下载视频网站的TS文件,甚至批量下载…...

Linux下进程间的通信--共享内存
共享内存概述: 共享内存是进程间通信的一种方式,它允许两个或多个进程共享一个给定的存储区。共享内存是最快的一种IPC形式,因为它允许进程直接对内存进行读写操作,而不需要数据在进程之间复制。 共享内存是进程间通信ÿ…...
Big Data 流处理框架 Flink
Big Data 流处理框架 Flink 什么是 FlinkFlink 的主要特性典型应用场景 Amazon Elastic MapReduce (EMR) VS Flink架构和运行时环境实时处理能力开发和编程模型操作和管理应用场景总结 Flink 支持的数据源Flink 如何消费 AWS SQS 数据源自定义 Source FunctionFlink Connector …...

校园水电费管理微信小程序的设计与实现+ssm(lw+演示+源码+运行)
校园水电费管理小程序 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来…...

HashMap线程不安全|Hashtable|ConcurrentHashMap
文章目录 常见集合线程安全性HashMap为什么线程不安全?怎么保证HashMap线程安全 HashtableConcurrentHashMap 引入细粒度锁代码中分析总结 小结 常见集合线程安全性 ArrayList、LinkedList、TreeSet、HashSet、HashMap、TreeMap等都是线程不安全的。 HashTable是线…...
01 会计概述
会计的定义:会计是以货币为计量单位,反映和监督一个单位经济活动的一种经济管理活动。会计的作用:就是提供决策信息、促使企业加强经营管理、考核管理层经济责任履行情况。会计人员职业道德:坚持诚信,守法奉公…...

开放式激光振镜运动控制器在Ubuntu+Qt下的文本标刻
开放式激光振镜运动控制器在UbuntuQt下的文本标刻 上节课程我们讲述了如何通过UbuntuQt进行振镜校正(详情点击→开放式激光振镜运动控制器在UbuntuQt下的激光振镜校正),本节文本标刻是在振镜校正的前提下实现的。 在正式学习之前࿰…...

推荐3款AIai论文大纲一键生成文献,精选整理!
在当前的学术写作环境中,AI论文大纲生成工具已经成为许多学者和学生的重要助手。这些工具不仅能够快速生成高质量的论文大纲,还能提供内容填充、文献引用和查重修改等全方位的服务。以下是三款值得推荐的AI论文大纲一键生成文献工具:千笔-AIP…...

数据库之索引<保姆级文章>
目录: 一. 什么是索引 二. 索引应该选择哪种数据结构 三. MySQL中的页 四. 索引分类及使用 一. 什么是索引: 1. MySQL的索引是⼀种数据结构,它可以帮助数据库高效地查询、更新数据表中的数据。 索引通过 ⼀定的规则排列数据表中的记录&#x…...

多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测
多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测 目录 多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于BO-LSSVM贝叶斯优化最小二乘支…...

Netty笔记03-组件Channel
文章目录 Channel概述Channel 的概念Channel 的主要功能Channel 的生命周期Channel 的状态Channel 的类型channel 的主要方法 ChannelFutureCloseFuture💡 netty异步提升的是什么要点总结 Channel概述 Channel 的概念 在 Netty 中,Channel 是一个非常重…...

1----安卓机型修复串码 开启端口 檫除基带 支持高通与MTK机型工具预览与操作解析
在玩机过程中。很多玩家会碰到各种各样的故障 。其中最多的就在于基带 串码类。由于目前的安卓机型必须修改或者写入串码等参数必须开启端口。而一些初级玩友不太了解开启参数端口的步骤。这个工具很简单的为安卓机型开启端口。并且操作相对简单。 此工具基本功能 1-----可以…...

Docker容器技术1——docker基本操作
Docker容器技术 随着云计算和微服务架构的普及,容器技术成为了软件开发、测试和部署过程中的重要组成部分。其中,Docker作为容器技术的代表之一,以其简便易用的特点赢得了广大开发者的青睐。 Docker允许开发者在轻量级、可移植的容器中打包和…...

Redis底层数据结构之深入理解跳表(1)
在上一篇文章中我们详细的介绍了一下Redis中跳表的结构以及为什么Redis要引入跳表而不是平衡树或红黑树。这篇文章我们就来详细梳理一下跳表的增加、搜索和删除步骤。 SkipList的初始化 跳表初始化时,将每一层链表的头尾节点创建出来并使用集合将头尾节点进行存储&…...

使用 HTML + JavaScript 实现可拖拽的任务看板系统
本文将介绍如何使用 HTML、CSS 和 JavaScript 创建一个交互式任务看板系统。该系统支持拖拽任务、添加新任务以及动态创建列,适用于任务管理和团队协作场景。 效果演示 页面结构 HTML 部分主要包含三个默认的任务列(待办、进行中、已完成)和一个用于添加新列的按钮。 <…...

核心机制:流量控制
搭配滑动窗口使用的 窗口大小 窗口越大,传输速度就越快,但是也不能无限大,太大了,对于可靠性会有影响 比如发生方以非常快的速度,发送,接收方的处理速度跟不上,也就会导致有效数据被接受方丢弃(又得重传) 流量控制,就是根据接收方的处理能力(如何衡量?),干预到发送方的发送…...

java后端生成心电图-jfreechart
用jfreechart生成心电图 先上成功的图片 上代码 1.导入包 implementation org.jfree:jfreechart:1.5.4implementation org.jfree:jcommon:1.0.242.实现代码 对数据进行滤波 转换单位 package com.shinrun.infrastructure.util;import java.util.ArrayList; import java.ut…...

Redisson单机模式
redisson调用unlock的过程 Redisson 是一个基于 Redis 的 Java 驻内存数据网格(In-Memory Data Grid)框架,提供了分布式和可扩展的数据结构和服务。Redisson 的 unlock 方法用于释放锁。下面是 unlock 方法的调用过程: 获取锁的状…...

Idea 配置 Maven 环境
下载 Maven 官网:https://maven.apache.org/index.html 点击左侧 Downloads,然后选择 Files 中的 zip 包下载(下载慢可以使用迅雷) 配置 Maven 将压缩包解压,比如我解压后放到了 D:\developer\environment\apache-…...
VMware安装Ubuntu全攻略
VMware安装Ubuntu实战分享大纲 准备工作 列出安装前的必要条件和工具,包括硬件要求、软件下载链接等。 VMware Workstation Pro/Player的安装与激活Ubuntu镜像文件下载(官方推荐版本)确保主机系统满足虚拟化技术(VT-x/AMD-V)要求创建虚拟机 详细描述在VMware中创建新虚…...

golang -- slice 底层逻辑
目录 一、前言二、结构三、创建3.1 根据 make创建3.2 通过数组创建 四、内置append追加元素4.1 追加元素4.2 是否扩容4.2.1 不扩容4.2.2 扩容 总结 一、前言 前段时间学了go语言基础,过了一遍之后还是差很多,所以又结合几篇不同资料重新学习了一下相关…...

基于FPGA的DES加解密系统verilog实现,包含testbench和开发板硬件测试
目录 1.课题概述 2.系统测试效果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于FPGA的DES加解密系统verilog实现,包含testbench和开发板硬件测试。输入待加密数据,密钥,输出加密数据,然后通过解密模块输出解密后的原…...
【HarmonyOS 5】鸿蒙Taro跨端框架
Taro跨端框架 支持React语法开发鸿蒙应用,架构分为三层: ArkVM层运行业务代码和React核心TaroElement树处理节点创建和属性绑定TaroRenderNode虚拟节点树与上屏节点一一对应 import { Component } from tarojs/taro export default class MyCompon…...