07_朴素贝叶斯

文章目录

  • [1 概述](#1 概述)
    • [1.1 贝叶斯定理](#1.1 贝叶斯定理)
    • [1.2 朴素贝叶斯](#1.2 朴素贝叶斯)
  • [2 算法流程](#2 算法流程)
    • [2.1 训练阶段](#2.1 训练阶段)
    • [2.2 预测阶段](#2.2 预测阶段)
  • [3 API 使用](#3 API 使用)
  • [4 算法优缺点](#4 算法优缺点)

1 概述

1.1 贝叶斯定理

贝叶斯定理是概率论中的一个重要定理,它描述了如何从主观经验或已知事实出发,通过收集到的样本数据(证据)来更新对事件发生概率的认知(信念)。贝叶斯定理的数学表达式为:
P ( A ∣ B ) = P ( B ∣ A ) P ( B ) ⋅ P ( A ) P(A \mid B) = \frac{P(B \mid A)}{P(B)} \cdot P(A) P(A∣B)=P(B)P(B∣A)⋅P(A)

  • P ( A ) {P(A)} P(A) 是事件 A {A} A 发生的先验概率 ,我们可以理解为已知事实或主观经验(主观概率
  • P ( B ∣ A ) {P(B \mid A)} P(B∣A) 是在事件 A {A} A 发生的条件下事件 B {B} B 发生的条件概率 ,通常也称之为似然性(likelihood)
  • P ( B ) {P(B)} P(B) 是事件 B {B} B 发生的(全)概率,和 P ( B ∣ A ) {P(B \mid A)} P(B∣A) 可以通过收集到的样本数据(证据)获取
  • P ( A ∣ B ) {P(A \mid B)} P(A∣B) 是在事件 B {B} B 发生的条件下事件 A {A} A 发生的条件概率,即收集到样本数据后对事件 A {A} A 发生概率的重新认知,称之为后验概率

贝叶斯定理告诉我们一个重要的事实:可以从已知的事实或主观经验出发,通过收集到的证据来更新我们对某个事件发生概率的认知,也就是可以通过已知的事实和收集的证据来推断出未知的真相

1.2 朴素贝叶斯

朴素贝叶斯算法是基于贝叶斯定理和特征条件独立性假设的分类算法,因其简单高效而受到广泛应用。朴素贝叶斯算法的关键在于"朴素 "二字,也就是刚才所说的特征条件独立性假设,即用于分类的特征在类确定的条件下都是独立的,该假设使得朴素贝叶斯的学习成为可能。

假设我们有一个特征集合 X = { x 1 , x 2 , ... , x n } {X = \{x_1, x_2, \ldots, x_n\}} X={x1,x2,...,xn} 和一个类别 C {C} C ,朴素贝叶斯算法假设:
P ( X ∣ C ) = P ( x 1 ∣ C ) ⋅ P ( x 2 ∣ C ) ⋅ ... ⋅ P ( x n ∣ C ) P(X \vert C) = P(x_1 \vert C) \cdot P(x_2 \vert C) \cdot \ldots \cdot P(x_n \vert C) P(X∣C)=P(x1∣C)⋅P(x2∣C)⋅...⋅P(xn∣C)

这个假设使得我们无需考虑特征之间复杂的依赖关系,极大简化了条件概率的计算。

2 算法流程

2.1 训练阶段

首先计算每个类别的先验概率和每个特征在各个类别下的条件概率。

  1. 计算先验概率:
    P ( C i ) = n i n P(C_{i}) = \frac{n_{i}}{n} P(Ci)=nni
    C i {C_{i}} Ci 表示类别, n i {n_{i}} ni 是类别 C i {C_{i}} Ci 的样本数量, n {n} n 是总的样本容量。
  2. 计算条件概率:
    P ( x j ∣ C i ) = n i , j n i P(x_{j} \vert C_{i}) = \frac{n_{i,j}}{n_{i}} P(xj∣Ci)=nini,j
    n i , j {n_{i,j}} ni,j 是在类别 C i {C_{i}} Ci 中,特征 x j {x_{j}} xj 出现的次数。

2.2 预测阶段

给定一个待分类样本 X \small{X} X ,朴素贝叶斯算法通过以下步骤来计算其属于每个类别的后验概率:
P ( C i ∣ X ) = P ( X ∣ C i ) P ( X ) ⋅ P ( C i ) P(C_{i} \vert X) = \frac{P(X \vert C_{i})}{P(X)} \cdot P(C_{i}) P(Ci∣X)=P(X)P(X∣Ci)⋅P(Ci)

上面的公式中, P ( X ) \small{P(X)} P(X) 对应到每个类别都是一个常量,可以忽略掉它,再结合独立性假设有:
P ( C i ∣ X ) ∝ P ( C i ) ⋅ P ( x 1 ∣ C i ) ⋅ P ( x 2 ∣ C i ) ⋅ ... ⋅ P ( x n ∣ C i ) P(C_{i} \vert X) \propto P(C_{i}) \cdot P(x_1 \vert C_{i}) \cdot P(x_2 \vert C_{i}) \cdot \ldots \cdot P(x_n \vert C_{i}) P(Ci∣X)∝P(Ci)⋅P(x1∣Ci)⋅P(x2∣Ci)⋅...⋅P(xn∣Ci)

然后选择具有最高后验概率的类别作为预测结果。

3 API 使用

sklearn.navie_bayes 模块下有五个朴素贝叶斯算法的变体,每种变体针对不同类型的数据和特征分。

分类器 特征类型 主要假设
BernoulliNB 二元特征 特征服从 Bernoulli 分布
CategoricalNB 类别特征 特征服从多项式分布,常用于处理类别数据
ComplementNB 计数特征 利用补集概率,常用于处理不平衡数据集
GaussianNB 连续特征 特征服从高斯分布
MultinomialNB 计数特征 特征服从多项式分布,常用于文本分类
python 复制代码
from sklearn.naive_bayes import GaussianNB

model = GaussianNB()
model.fit(X_train, y_train)

# 分类结果
y_pred = model.predict(X_test)

# 分类概率,为了方便观看,保留两位小数
y_proba = model.predict_proba(X_test).round(2)

4 算法优缺点

优点:

  1. 逻辑简单容易实现,适合大规模数据集。
  2. 运算开销较小。预测需要用到的概率在训练阶段都已经准好了,当新数据来了之后,只需要获取对应的概率值并进行简单的运算就能获得预测的结果。
  3. 受噪声和无关属性影响小。

缺点:由于引入了"特征相互独立"这个假设,缺点也相当明显,因为在实际应用中,特征之间很难做到完全独立,尤其是维度很高的数据,如果特征之间的相关性较大,那么分类的效果就会变得很差。

为了解决朴素贝叶斯的缺点,在其基础上又衍生出了一些新的方法,包括:半朴素贝叶斯(One Dependent Estimator)、AODE(Averaged One Dependent Estimator)、K 依赖朴素贝叶斯、朴素贝叶斯网络、高斯混合朴素贝叶斯等。

相关推荐
IT_Beijing_BIT20 小时前
tensorflow 图像分类 之四
人工智能·分类·tensorflow
卡奥斯开源社区官方21 小时前
NVIDIA Blackwell架构深度解析:2080亿晶体管如何重构AI算力规则?
人工智能·重构·架构
百锦再21 小时前
第11章 泛型、trait与生命周期
android·网络·人工智能·python·golang·rust·go
数新网络1 天前
The Life of a Read/Write Query for Apache Iceberg Tables
人工智能·apache·知识图谱
Yangy_Jiaojiao1 天前
开源视觉-语言-动作(VLA)机器人项目全景图(截至 2025 年)
人工智能·机器人
gorgeous(๑>؂<๑)1 天前
【ICLR26匿名投稿】OneTrackerV2:统一多模态目标跟踪的“通才”模型
人工智能·机器学习·计算机视觉·目标跟踪
坠星不坠1 天前
pycharm如何导入ai大语言模型的api-key
人工智能·语言模型·自然语言处理
周杰伦_Jay1 天前
【智能体(Agent)技术深度解析】从架构到实现细节,核心是实现“感知环境→处理信息→决策行动→影响环境”的闭环
人工智能·机器学习·微服务·架构·golang·数据挖掘
王哈哈^_^1 天前
【完整源码+数据集】课堂行为数据集,yolo课堂行为检测数据集 2090 张,学生课堂行为识别数据集,目标检测课堂行为识别系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
Elastic 中国社区官方博客1 天前
Observability:适用于 PHP 的 OpenTelemetry:EDOT PHP 加入 OpenTelemetry 项目
大数据·开发语言·人工智能·elasticsearch·搜索引擎·全文检索·php