Python中朴素贝叶斯算法的详细代码解析
朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的简单有效的分类算法。它常用于文本分类任务,如垃圾邮件检测、情感分析等等。朴素贝叶斯假设特征之间是条件独立的,这使得它实现和学习都非常简单。
下面是一个使用Python实现朴素贝叶斯分类器的简单代码示例。这个例子将文本分类作为应用场景。为了简洁起见,使用的是多项式朴素贝叶斯(Multinomial Naive Bayes),这非常适合用于文本分类。
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn import metrics
# 示例数据集
# 文本和对应的类别标签
data = [
("I love this movie", "positive"),
("This movie is terrible", "negative"),
("Amazing film, I will watch it again", "positive"),
("I wouldn't recommend this movie", "negative"),
]
# 分离文本和标签
texts, labels = zip(*data)
# 将文本转化为词频向量
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)
# 初始化多项式朴素贝叶斯分类器
clf = MultinomialNB()
# 训练模型
clf.fit(X_train, y_train)
# 进行预测
y_pred = clf.predict(X_test)
# 输出预测结果
print("Predicted:", y_pred)
print("Actual:", y_test)
# 计算模型精度
accuracy = metrics.accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 打印分类报告
print(metrics.classification_report(y_test, y_pred))
代码解析:
数据准备:我们首先准备了一些示例文本数据以及它们对应的类别标签(正面和负面)。
特征提取:我们使用
CountVectorizer
将文本数据转化为词频矩阵,这是一种常见的文本特征表示方法。训练/测试集划分:使用
train_test_split
函数将数据集划分为训练集和测试集。模型初始化和训练:创建一个
MultinomialNB
实例,并用训练集数据来训练模型。模型预测和评估:在测试集上进行预测,并计算模型的准确性、精度、召回率、以及F1-score等性能指标。这些信息由
classification_report
函数提供。结果输出:输出预测的结果以及实际的标签,以便于比较。
这个简化的流程展示了如何使用朴素贝叶斯算法进行文本分类。在实际应用中,数据预处理可能更加复杂,比如需要去除停用词、进行文本标准化等。同时,用于分类的特征表示方式也有多种选择,除了词频,还可以使用TF-IDF等。