基于BernoulliNB()算法的Python中文文本分类示例代码
BernoulliNB是一种基于贝叶斯定理的朴素贝叶斯分类算法,用于文本分类问题。下面是一个使用BernoulliNB算法进行中文文本分类的示例代码。
首先,我们需要导入所需的库:
import jieba
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import BernoulliNB
from sklearn.metrics import accuracy_score
接下来,我们准备训练集和测试集数据。在这个示例中,我们使用两个分类(positive和negative)的文本,每个分类有100个样本。我们将训练集和测试集的文本内容放在一个列表中,标签放在另一个列表中。
train_data = [
"这家店的服务态度非常好,菜也很美味!",
"这个电影太棒了,剧情精彩,演员演技也很出色!",
"这个手机真的很好用,手机质量也很高!",
"这个餐厅的菜真不好吃,服务态度也很差!",
"这部电影太烂了,演员演技差得不能再差了!",
"这个手机真的很垃圾,质量也很差!"
]
train_labels = ["positive", "positive", "positive", "negative", "negative", "negative"]
test_data = [
"这家店的菜不错,服务态度也很好!",
"这个电影一般般,没有想象中的好看。",
"这个手机性价比很高,质量也不错。",
"这个餐厅的菜真的很糟糕,服务态度也很差!",
"这部电影真的很烂,演员演技差得不能再差了!",
"这个手机真的很糟糕,质量也很差!"
]
test_labels = ["positive", "negative", "positive", "negative", "negative", "negative"]
然后,我们将文本数据进行分词处理,并将分词后的结果转换成特征向量。我们使用jieba库进行中文分词,并使用CountVectorizer将分词结果转换成特征向量。
# 中文分词
def cut_words(text):
return " ".join(jieba.cut(text))
# 特征向量化
vectorizer = CountVectorizer(tokenizer=cut_words)
train_features = vectorizer.fit_transform(train_data)
test_features = vectorizer.transform(test_data)
接下来,我们使用BernoulliNB算法进行文本分类。首先,我们需要创建一个BernoulliNB分类器对象,并使用训练集特征向量和标签进行训练。然后,我们使用训练好的分类器对测试集特征向量进行分类预测。
# 创建分类器对象
clf = BernoulliNB()
# 训练分类器
clf.fit(train_features, train_labels)
# 对测试集进行预测
predicted_labels = clf.predict(test_features)
最后,我们可以使用accuracy_score函数计算分类的准确率。
# 计算准确率
accuracy = accuracy_score(test_labels, predicted_labels)
print("准确率:", accuracy)
完整的示例代码如下:
import jieba
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import BernoulliNB
from sklearn.metrics import accuracy_score
# 中文分词
def cut_words(text):
return " ".join(jieba.cut(text))
# 准备训练集和测试集数据
train_data = [
"这家店的服务态度非常好,菜也很美味!",
"这个电影太棒了,剧情精彩,演员演技也很出色!",
"这个手机真的很好用,手机质量也很高!",
"这个餐厅的菜真不好吃,服务态度也很差!",
"这部电影太烂了,演员演技差得不能再差了!",
"这个手机真的很垃圾,质量也很差!"
]
train_labels = ["positive", "positive", "positive", "negative", "negative", "negative"]
test_data = [
"这家店的菜不错,服务态度也很好!",
"这个电影一般般,没有想象中的好看。",
"这个手机性价比很高,质量也不错。",
"这个餐厅的菜真的很糟糕,服务态度也很差!",
"这部电影真的很烂,演员演技差得不能再差了!",
"这个手机真的很糟糕,质量也很差!"
]
test_labels = ["positive", "negative", "positive", "negative", "negative", "negative"]
# 特征向量化
vectorizer = CountVectorizer(tokenizer=cut_words)
train_features = vectorizer.fit_transform(train_data)
test_features = vectorizer.transform(test_data)
# 创建分类器对象
clf = BernoulliNB()
# 训练分类器
clf.fit(train_features, train_labels)
# 对测试集进行预测
predicted_labels = clf.predict(test_features)
# 计算准确率
accuracy = accuracy_score(test_labels, predicted_labels)
print("准确率:", accuracy)
这个示例中,我们使用BernoulliNB算法对中文文本进行分类。首先,我们使用jieba库对文本进行分词处理,然后使用CountVectorizer将分词后的结果转换成特征向量。接着,我们使用训练集特征向量和标签训练BernoulliNB分类器,并使用训练好的分类器对测试集特征向量进行预测。最后,我们使用accuracy_score函数计算准确率评估分类结果。
