开发也能看懂的大模型:贝叶斯分类器

764 阅读3分钟

贝叶斯分类器是一种基于 贝叶斯定理 的统计分类方法,广泛用于文本分类、垃圾邮件检测和图像识别等任务。以下是详细讲解:


1. 贝叶斯定理基础

贝叶斯定理描述了如何根据已知信息计算事件的条件概率,其公式如下:

image.png

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

image.png


3. 朴素贝叶斯分类器

在贝叶斯分类器中,朴素贝叶斯(Naive Bayes)是一种常用的实现,假设特征是条件独立的,即:

image.png

4. 优点和缺点

优点

  • 高效:计算简单,训练和预测速度快。
  • 鲁棒性:在特征独立假设下表现很好,即使假设不完全成立,效果仍然不错。
  • 适合高维数据:特别适合文本分类任务。

缺点

  • 特征独立假设:特征之间的强相关性会降低性能。
  • 数据稀疏问题:如果某些特征值在训练集中从未出现,条件概率会为 0,影响分类结果。
  • 类别边界简单:对复杂边界问题表现不如其他分类器(如支持向量机或深度学习模型)。

5. 常见变种

朴素贝叶斯分类器根据不同的数据分布假设,有以下几种主要变种:

  • 高斯朴素贝叶斯(Gaussian Naive Bayes):适用于连续数据,假设特征符合正态分布。
  • 多项式朴素贝叶斯(Multinomial Naive Bayes):适用于离散计数数据(如词频)。
  • 伯努利朴素贝叶斯(Bernoulli Naive Bayes):适用于二元数据(如文本中的词是否出现)。

6. 示例:文本分类

问题背景

我们有以下数据集:

文档 ID文本内容类别
D1"I love programming"Positive
D2"Python is amazing"Positive
D3"I dislike bugs"Negative

目标是用朴素贝叶斯分类器预测一条新文本 "I love Python" 的分类标签。


训练阶段

image.png (1)计算 Positive 类别的条件概率:

  • 文档 D1 和 D2 属于 Positive 类别,统计所有单词及其频率:

    I: 1, love: 1, programming: 1, Python: 1, is: 1, amazing: 1
    
  • Positive 类别总单词数为 6,词汇表大小为 8。

image.png (2)计算 Negative 类别的条件概率:

  • 文档 D3 属于 Negative 类别,统计所有单词及其频率:

    I: 1, dislike: 1, bugs: 1
    
  • Negative 类别总单词数为 3,词汇表大小为 8。

image.png

预测阶段

现在对新文本 "I love Python" 进行分类。

image.png

代码实现

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline

# 数据集
texts = ["I love programming", "Python is amazing", "I dislike bugs"]
labels = ["Positive", "Positive", "Negative"]

# 创建模型管道
model = make_pipeline(CountVectorizer(), MultinomialNB())

# 训练模型
model.fit(texts, labels)

# 测试新文本
test_text = ["I love Python"]
predicted_label = model.predict(test_text)
print(f"Predicted label: {predicted_label[0]}") 

#输出:Predicted label: Positive

总结

  • 朴素贝叶斯分类器 通过比较后验概率 P(Ck∣x) 的大小来进行分类。
  • 其核心在于利用 词汇的条件概率类别的先验概率,通过连乘计算后验概率。