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 依赖朴素贝叶斯、朴素贝叶斯网络、高斯混合朴素贝叶斯等。

相关推荐
机器人零零壹1 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
电子元件小说家2 小时前
2026年四季度电感市场观察:AI算力与汽车电子驱动下的选型与验证建议智能硬件
人工智能·汽车
网易CodeWave-小码哥2 小时前
支持多模块 Java 微服务导入|CodeWave SDD V4.5.10 上线
人工智能
AI你一生一世2 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
belldeep2 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
怕浪猫2 小时前
小程序成长计划上新:10 亿 Token 现在能调 DeepSeek-v4.1-flash了
人工智能·aigc·ai编程
ss2733 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
七牛云行业应用4 小时前
DeepSeek Super-agent 与 Grok Bot:开源 Agent 架构和聊天助手有何区别
人工智能·ai·架构·ai编程
维克兜率天4 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python
u1301304 小时前
GitHub 热榜项目:日榜(2026-11-03)
人工智能·github