欢迎访问宙启技术站
智能推送

基于BernoulliNB()算法的Python中文文本分类示例代码

发布时间:2023-12-11 08:11:51

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函数计算准确率评估分类结果。