当前位置: 首页 > article >正文

贝叶斯分类器(Naive Bayes)

贝叶斯分类器(Naive Bayes)详解

贝叶斯分类器是一种基于贝叶斯定理的概率分类模型。它常用于文本分类(如垃圾邮件分类)等任务,依赖于条件概率推理来判断某个样本属于哪个类别。朴素贝叶斯分类器是贝叶斯分类器的一个简单而有效的变种,它假设特征之间相互独立,这一假设被称为“朴素假设”。


1. 贝叶斯定理回顾

贝叶斯定理描述了如何在给定一些证据的情况下计算事件的后验概率。其基本公式为:

P ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) P ( B ) P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

  • P ( A ∣ B ) P(A|B) P(AB):给定事件 B B B 发生的情况下,事件 A A A 发生的条件概率(后验概率)。
  • P ( B ∣ A ) P(B|A) P(BA):给定事件 A A A 发生的情况下,事件 B B B 发生的条件概率(似然)。
  • P ( A ) P(A) P(A):事件 A A A 的先验概率。
  • P ( B ) P(B) P(B):事件 B B B 的边际概率。

2. 朴素贝叶斯分类器的基本思想

假设我们有一个输入样本 X = ( x 1 , x 2 , … , x n ) X = (x_1, x_2, \dots, x_n) X=(x1,x2,,xn),每个特征 x i x_i xi 都是条件独立的(即给定类别 C k C_k Ck 时,各特征之间相互独立),可以使用贝叶斯定理计算样本属于某个类别 C k C_k Ck 的后验概率 P ( C k ∣ X ) P(C_k | X) P(CkX)

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(CkX)=P(X)P(XCk)P(Ck)

在朴素贝叶斯分类器中,特征的条件独立性假设将条件概率 P ( X ∣ C k ) P(X | C_k) P(XCk) 表示为:

P ( X ∣ C k ) = ∏ i = 1 n P ( x i ∣ C k ) P(X | C_k) = \prod_{i=1}^{n} P(x_i | C_k) P(XCk)=i=1nP(xiCk)

因此,后验概率公式可简化为:

P ( C k ∣ X ) = P ( C k ) ⋅ ∏ i = 1 n P ( x i ∣ C k ) P ( X ) P(C_k | X) = \frac{P(C_k) \cdot \prod_{i=1}^{n} P(x_i | C_k)}{P(X)} P(CkX)=P(X)P(Ck)i=1nP(xiCk)

由于 P ( X ) P(X) P(X) 对所有类别是相同的,因此可以忽略它,最终的分类规则为:

C ^ = arg ⁡ max ⁡ C k P ( C k ) ∏ i = 1 n P ( x i ∣ C k ) \hat{C} = \arg\max_{C_k} P(C_k) \prod_{i=1}^{n} P(x_i | C_k) C^=argmaxCkP(Ck)i=1nP(xiCk)


3. 训练朴素贝叶斯分类器

训练阶段需要计算以下两部分:

  1. 先验概率 P ( C k ) P(C_k) P(Ck)
    P ( C k ) = 类别 C k 的样本数 总样本数 P(C_k) = \frac{\text{类别} C_k \text{的样本数}}{\text{总样本数}} P(Ck)=总样本数类别Ck的样本数

  2. 条件概率 P ( x i ∣ C k ) P(x_i | C_k) P(xiCk)

    • 对于离散特征:
      P ( x i ∣ C k ) = 在类别 C k 中,特征 x i 的出现次数 类别 C k 的总样本数 P(x_i | C_k) = \frac{\text{在类别} C_k \text{中,特征} x_i \text{的出现次数}}{\text{类别} C_k \text{的总样本数}} P(xiCk)=类别Ck的总样本数在类别Ck中,特征xi的出现次数
    • 对于连续特征(假设其服从高斯分布):
      P ( x i ∣ C k ) = 1 2 π σ k 2 exp ⁡ ( − ( x i − μ k ) 2 2 σ k 2 ) P(x_i | C_k) = \frac{1}{\sqrt{2 \pi \sigma_k^2}} \exp\left(-\frac{(x_i - \mu_k)^2}{2 \sigma_k^2}\right) P(xiCk)=2πσk2 1exp(2σk2(xiμk)2)
      其中, μ k \mu_k μk σ k \sigma_k σk 分别为特征 x i x_i xi 在类别 C k C_k Ck 中的均值和标准差。

4. 预测新样本的类别

给定一个新样本 X ′ = ( x 1 ′ , x 2 ′ , … , x n ′ ) X' = (x'_1, x'_2, \dots, x'_n) X=(x1,x2,,xn),需要计算每个类别的后验概率 P ( C k ∣ X ′ ) P(C_k | X') P(CkX),选择后验概率最大的类别作为预测结果:

C ^ = arg ⁡ max ⁡ C k P ( C k ) ∏ i = 1 n P ( x i ′ ∣ C k ) \hat{C} = \arg\max_{C_k} P(C_k) \prod_{i=1}^{n} P(x'_i | C_k) C^=argmaxCkP(Ck)i=1nP(xiCk)


5. 优缺点

优点

  1. 简单高效:计算快速,适用于大规模数据集。
  2. 性能良好:在许多实际问题中表现优秀,尤其是文本分类任务。
  3. 适应性强:适用于高维特征数据。

缺点

  1. 特征独立性假设:假设不总是成立,可能限制模型性能。
  2. 对稀有特征敏感:如果某特征未在训练集中出现,其条件概率为零,可能导致预测失败(可通过拉普拉斯平滑解决)。

6. 代码实现示例

以下是使用 Python 和 scikit-learn 实现朴素贝叶斯分类器的代码:

from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
data = load_iris()
X = data.data
y = data.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化朴素贝叶斯分类器
model = GaussianNB()

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
print(f"Accuracy: {accuracy_score(y_test, y_pred):.2f}")
  1. 总结

朴素贝叶斯分类器是一种简单、有效的分类算法。尽管其特征独立性假设可能在某些场景下不成立,但它在高维数据(如文本分类)中表现尤为出色。结合合适的平滑技术和特征处理方法,朴素贝叶斯可以作为基准模型或解决实际问题的有力工具。


http://www.kler.cn/a/445421.html

相关文章:

  • C盘下的文件夹
  • Fastdfs V6.12.1集群部署(arm/x86均可用)
  • idea无法识别文件,如何把floder文件恢复成model
  • Java-31 深入浅出 Spring - IoC 基础 启动IoC XML与注解结合的方式 配置改造 applicationContext.xml
  • 毕业论文如何生成图表目录小记
  • Pr:音频剪辑混合器
  • EE308FZ_Sixth Assignment_Beta Sprint Summary
  • 开源数字人系统源码短视频文案提取文案改写去水印小程序
  • qt 类中的run线程
  • 【漏洞复现】CVE-2022-45206 CVE-2023-38905 SQL Injection
  • Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络
  • ajax同步执行async:false无效的解决方法
  • Nmea0813协议 C语言解析Demo
  • 网上卖课割韭菜
  • 基于Python的天文图像处理系统
  • hdparm 功能解析
  • 微软的 GraphRAG + AutoGen + Ollama + Chainlit = 本地和免费的多代理 RAG 超级机器人
  • 14篇--模板匹配
  • C# 表达式树
  • C++ 11(1)