贝叶斯分类器是一种基于 贝叶斯定理 的统计分类方法,广泛用于文本分类、垃圾邮件检测和图像识别等任务。以下是详细讲解:
1. 贝叶斯定理基础
贝叶斯定理描述了如何根据已知信息计算事件的条件概率,其公式如下:
2. 贝叶斯分类器的基本思想
3. 朴素贝叶斯分类器
在贝叶斯分类器中,朴素贝叶斯(Naive Bayes)是一种常用的实现,假设特征是条件独立的,即:
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" 的分类标签。
训练阶段
(1)计算 Positive 类别的条件概率:
-
文档 D1 和 D2 属于 Positive 类别,统计所有单词及其频率:
I: 1, love: 1, programming: 1, Python: 1, is: 1, amazing: 1
-
Positive 类别总单词数为 6,词汇表大小为 8。
(2)计算 Negative 类别的条件概率:
-
文档 D3 属于 Negative 类别,统计所有单词及其频率:
I: 1, dislike: 1, bugs: 1
-
Negative 类别总单词数为 3,词汇表大小为 8。
预测阶段
现在对新文本 "I love Python" 进行分类。
代码实现
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) 的大小来进行分类。
- 其核心在于利用 词汇的条件概率 和 类别的先验概率,通过连乘计算后验概率。