朴素贝叶斯分类器是一种基于贝叶斯定理的简单但高效的分类算法。其核心在于特征独立性假设和概率计算。本文将详细介绍这两个关键点,并通过实践展示其应用。
朴素贝叶斯分类器的一个核心假设是特征的独立性,即给定类别的情况下,各个特征之间相互独立。这个假设大大简化了概率计算,使得算法在保持高效的同时仍能达到较好的分类效果。
假设有一个数据集 \(D = \{(x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\}\),其中 \(x_i\) 是特征向量,\(y_i\) 是类别标签。朴素贝叶斯的目标是计算每个类别的后验概率 \(P(y|x)\),并选择概率最大的类别作为预测结果。
根据贝叶斯定理:
\[P(y|x) = \frac{P(x|y)P(y)}{P(x)}\]
其中:
由于 \(P(x)\) 对于所有类别是相同的,所以只需要比较 \(P(x|y)P(y)\) 即可。
在特征独立性假设下,\(P(x|y)\) 可以分解为:
\[P(x|y) = P(x_1|y)P(x_2|y)\cdots P(x_n|y)\]
在实际应用中,通常使用最大似然估计(MLE)或拉普拉斯平滑(Laplace smoothing)来计算概率。
最大似然估计:
\[P(x_i|y) = \frac{\text{类别 } y \text{ 中特征 } x_i \text{ 出现的次数}}{\text{类别 } y \text{ 的样本总数}}\]
拉普拉斯平滑:
为了避免概率为零的情况,给每个特征的计数加一:
\[P(x_i|y) = \frac{\text{类别 } y \text{ 中特征 } x_i \text{ 出现的次数} + 1}{\text{类别 } y \text{ 的样本总数} + \text{特征总数}}\]
以下是一个简单的Python示例,演示如何使用朴素贝叶斯分类器进行文本分类。
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
# 加载数据集
newsgroups = fetch_20newsgroups(subset='all')
# 创建管道,包括TF-IDF向量化器和朴素贝叶斯分类器
model = make_pipeline(TfidfVectorizer(), MultinomialNB())
# 训练模型
model.fit(newsgroups.data, newsgroups.target)
# 预测
predicted = model.predict(newsgroups.data[:5])
print(predicted)
在这个示例中,使用 `fetch_20newsgroups` 函数加载20类新闻组数据集,通过 `TfidfVectorizer` 将文本数据转换为TF-IDF特征向量,然后使用 `MultinomialNB` 进行训练和预测。
朴素贝叶斯分类器通过特征独立性假设简化了概率计算,使得算法在保持高效的同时能够达到较好的分类效果。本文详细介绍了朴素贝叶斯分类器的原理,并通过实践示例展示了其在文本分类中的应用。