Jupyter AI

17 贝叶斯分类之朴素贝叶斯分类器

📅发表日期: 2024-08-15

🏷️分类: 贝叶斯学习

👁️阅读次数: 0

在上一篇中,我们探讨了贝叶斯分类的基本理论,介绍了贝叶斯定理、先验概率、似然函数以及后验概率的定义和计算方法。今天,我们将进一步深入到具体的分类模型——朴素贝叶斯分类器。这一分类器是概率图模型中特别简单而又强大的模型,广泛应用于文本分类、垃圾邮件检测等问题。

朴素贝叶斯分类器的基础

朴素贝叶斯分类器基于贝叶斯定理,假设特征之间是条件独立的。这一假设简化了计算,使得我们可以使用简单的概率计算来进行分类,其基本公式为:

P(CX1,X2,,Xn)=P(C)P(X1,X2,,XnC)P(X1,X2,,Xn)P(C | X_1, X_2, \ldots, X_n) = \frac{P(C) \cdot P(X_1, X_2, \ldots, X_n | C)}{P(X_1, X_2, \ldots, X_n)}

根据朴素假设,我们可以将条件概率分解为:

P(X1,X2,,XnC)=P(X1C)P(X2C)P(XnC)P(X_1, X_2, \ldots, X_n | C) = P(X_1 | C) \cdot P(X_2 | C) \cdots P(X_n | C)

因此,我们可以将后验概率转化为:

P(CX1,X2,,Xn)P(C)P(X1C)P(X2C)P(XnC)P(C | X_1, X_2, \ldots, X_n) \propto P(C) \cdot P(X_1 | C) \cdot P(X_2 | C) \cdots P(X_n | C)

在这个公式中,P(C)P(C) 是先验概率,P(XiC)P(X_i | C) 是似然概率,而 P(X1,X2,,Xn)P(X_1, X_2, \ldots, X_n) 是常量项,通常可以忽略。

例子:文本分类

考虑一个文本分类的例子,我们要分类一组电子邮件为“垃圾邮件”和“非垃圾邮件”。我们可以通过以下步骤实现朴素贝叶斯分类器:

  1. 数据预处理:将邮件拆分为单词并建立词汇表。
  2. 特征提取:计算每个单词在“垃圾邮件”和“非垃圾邮件”中出现的概率。
  3. 建立模型:基于已计算的概率来进行分类。

数据收集与处理

假设我们有以下三封邮件:

  • 邮件1:"免费 赚取 现金"
  • 邮件2:"重要 会议时间"
  • 邮件3:"赚取 免费 现金 机会"

标签:

  • 邮件1 : 垃圾邮件
  • 邮件2 : 非垃圾邮件
  • 邮件3 : 垃圾邮件

构建词汇表:["免费", "赚取", "现金", "重要", "会议", "时间", "机会"]

计算概率

接下来,我们计算每个单词在两类邮件中出现的概率。

  • 先验概率

    • P(垃圾邮件)=23P(\text{垃圾邮件}) = \frac{2}{3}
    • P(非垃圾邮件)=13P(\text{非垃圾邮件}) = \frac{1}{3}
  • 似然概率: 假设我们使用拉普拉斯平滑(避免零概率问题),我们计算每个单词在两类中的条件概率。

以单词 "免费" 为例:

  • 在垃圾邮件中出现:2次
  • 在非垃圾邮件中出现:0次
  • 词汇表大小:7

所以单词 "免费" 的概率为:

P(免费垃圾邮件)=2+14=34P(\text{免费} | \text{垃圾邮件}) = \frac{2 + 1}{4} = \frac{3}{4} P(免费非垃圾邮件)=0+14=14P(\text{免费} | \text{非垃圾邮件}) = \frac{0 + 1}{4} = \frac{1}{4}

同样可以计算其他单词的概率。

实现朴素贝叶斯分类器

我们可以使用Python的sklearn库来实现一个朴素贝叶斯分类器。以下是一个例子:

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

# 训练集
emails = [
    "免费 赚取 现金",
    "重要 会议时间",
    "赚取 免费 现金 机会"
]
labels = ["垃圾邮件", "非垃圾邮件", "垃圾邮件"]

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

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

# 测试邮件
test_email = ["重要 现金 机会"]
print(model.predict(test_email))  # 预测结果

总结

在本篇教程中,我们介绍了朴素贝叶斯分类器的基本概念及其工作原理,并通过一个文本分类的例子演示了如何实现这一分类器。在实践中,朴素贝叶斯分类器因其简单高效而被广泛应用。

接下来,我们将探讨如何对构建的模型进行评估与改进,以保证模型的准确性与高效性。

💬 评论

暂无评论