1. 引言
朴素贝叶斯算法是一种基于贝叶斯定理的分类方法,因其简单高效而被广泛应用于文本分类、情感分析等领域。本文将从零开始,带你轻松掌握scikit-learn中的朴素贝叶斯算法,并通过完整代码实操详解其应用。
2. 朴素贝叶斯算法原理
2.1 贝叶斯定理
贝叶斯定理是朴素贝叶斯算法的理论基础,其公式如下:
[ P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} ]
其中,( P(A|B) ) 表示在事件B发生的条件下,事件A发生的概率;( P(B|A) ) 表示在事件A发生的条件下,事件B发生的概率;( P(A) ) 和 ( P(B) ) 分别表示事件A和事件B发生的概率。
2.2 朴素贝叶斯假设
朴素贝叶斯算法假设特征之间相互独立,即 ( P(A \cap B) = P(A) \cdot P(B) )。
3. scikit-learn中的朴素贝叶斯算法
3.1 GNB(高斯朴素贝叶斯)
高斯朴素贝叶斯算法适用于连续值特征的分类问题。其核心思想是将特征值视为正态分布,并使用贝叶斯定理计算后验概率。
3.2 MultinomialNB(多项式朴素贝叶斯)
多项式朴素贝叶斯算法适用于文本分类问题,它假设特征之间是相互独立的,并且特征值服从多项式分布。
3.3 BernoulliNB(伯努利朴素贝叶斯)
伯努利朴素贝叶斯算法适用于二值特征或类别特征,它假设特征之间是相互独立的,并且特征值服从伯努利分布。
4. 完整代码实操详解
以下是一个使用scikit-learn中的MultinomialNB算法进行文本分类的完整代码示例:
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
newsgroups = fetch_20newsgroups(subset='all', categories=['alt.atheism', 'sci.space'])
X, y = newsgroups.data, newsgroups.target
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 特征提取
vectorizer = CountVectorizer()
X_train_counts = vectorizer.fit_transform(X_train)
X_test_counts = vectorizer.transform(X_test)
# 训练模型
model = MultinomialNB()
model.fit(X_train_counts, y_train)
# 预测
y_pred = model.predict(X_test_counts)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
5. 总结
本文从朴素贝叶斯算法的原理出发,介绍了scikit-learn中的三种朴素贝叶斯算法,并通过一个文本分类的完整代码示例,展示了如何使用MultinomialNB算法进行文本分类。希望本文能帮助你轻松掌握scikit-learn中的朴素贝叶斯算法。
