Python下Naive Bayes文本分类如何输出每条文本对应分类结果
实现方法
依赖安装
首先安装导出Excel需要的第三方库:
pip install pandas openpyxl
完整修改后代码
import sklearn.datasets as skd import pandas as pd categories = ['Dritte', 'EDT','EKN'] SAP_train = skd.load_files('C:/Users/s58916/PycharmProjects/textFiles/train/', categories= categories, encoding= 'ISO-8859-1') SAP_test = skd.load_files('C:/Users/s58916/PycharmProjects/textFiles/test/', categories= categories, encoding= 'ISO-8859-1') from sklearn.pipeline import Pipeline from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB text_clf = Pipeline([('vect', TfidfVectorizer()), ('clf', MultinomialNB()) ]) # 训练模型 text_clf.fit(SAP_train.data, SAP_train.target) # 预测测试集结果 predicted = text_clf.predict(SAP_test.data) from sklearn import metrics import numpy as np print('准确率为:' + str(np.mean(predicted == SAP_test.target))) print(metrics.classification_report(SAP_test.target, predicted, target_names=SAP_test.target_names)) print(metrics.confusion_matrix(SAP_test.target, predicted)) # ---------- 新增导出分类结果代码 ---------- # 把模型输出的数字标签转换为对应分类名称 predicted_labels = [SAP_test.target_names[i] for i in predicted] true_labels = [SAP_test.target_names[i] for i in SAP_test.target] # 构造结果表,可根据需要调整保留的列 result = pd.DataFrame({ "测试文本": SAP_test.data, "真实分类": true_labels, "预测分类": predicted_labels }) # 导出为Excel,index=False表示不导出多余行号 result.to_excel("文本分类结果.xlsx", index=False, engine="openpyxl") print("分类结果已导出到当前代码运行目录下的「文本分类结果.xlsx」")
补充说明
- 如果你不需要在结果里保留测试文本、真实分类,直接删除
pd.DataFrame构造函数里对应的字段即可 - 如果打开Excel出现乱码,可以替换导出语句为导出csv格式:
result.to_csv("文本分类结果.csv", index=False, encoding="utf-8-sig")
内容的提问来源于stack exchange,提问作者shima
相关产品推荐
相关产品推荐

