按概率分类
主要用于文本分类
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
def nb_new():
"""用朴素贝叶斯算法对新闻进行分类"""
# 1)获取数据
# 从20类新闻数据集中获取所有类别的数据
news = fetch_20newsgroups(subset="all")
# 2)划分数据集
# 将数据集划分为训练集和测试集,80%作为训练集,20%作为测试集
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.2, random_state=42)
# 3)特征工程
# 使用TF-IDF向量化器将文本转换为特征向量
transfer = TfidfVectorizer()
x_train = transfer.fit_transform(x_train) # 拟合并转换训练数据
x_test = transfer.transform(x_test) # 仅转换测试数据,不拟合
# 4)朴素贝叶斯预估器
# 创建朴素贝叶斯分类器实例
estimator = MultinomialNB()
estimator.fit(x_train, y_train) # 用训练数据拟合模型
# 模型评估
y_predict = estimator.predict(x_test) # 用测试数据进行预测
print("y_predict", y_predict) # 输出预测结果
# 直接对比真实标签和预测结果
print("直接对比\n", y_test == y_predict)
# 计算准确率
score = estimator.score(x_test, y_test) # 计算模型在测试集上的准确率
print("准确率", score) # 输出准确率
return None
# 调用函数进行朴素贝叶斯分类
nb_new()