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

相关推荐
智能相对论3 小时前
把AI装进OS、批量落地智慧服务,智能手机革命2.0来了
人工智能·智能手机
flying_13143 小时前
图神经网络分享系列-GAT(GRAPH ATTENTION NETWORKS) (一)
人工智能·神经网络·图神经网络·注意力机制·gnn·gat·图注意力网络
东皇太星3 小时前
机器学习概念,算法原理及应用
算法·机器学习·梯度下降法
周末程序猿3 小时前
谈谈 `Claude Skills`
人工智能·ai编程
IT_陈寒4 小时前
5个Vue3性能优化技巧,让你的应用提速50% 🚀(附实测对比)
前端·人工智能·后端
kalvin_y_liu4 小时前
微软Agent Framework
人工智能·microsoft
ximy13354 小时前
AI服务器工作之显卡测试
人工智能
孤独野指针*P4 小时前
深度学习之美》读书笔记 - 第一章 & 第二章
人工智能·深度学习
理不为4 小时前
提示词 prompt 快速上手
人工智能·prompt