11.5 准备工作
首先通过os.walk函数递归遍历指定目录及其子目录,收集文件的完整路径并输出。其次,导入多个Python库,涵盖数据处理、机器学习、文本处理和可视化,以及深度学习方面的模型建立。最后,定义了一个函数用于生成混淆矩阵热力图,以评估模型在文本分类任务中的性能。
11.5.1 遍历数据集目录
使用os.walk函数递归遍历指定目录及其子目录,获取每个文件的完整路径,并将这些路径打印出来。具体实现代码如下所示。
import os
# 遍历指定目录及其子目录中的所有文件
for dirname, _, filenames in os.walk('input'):
for filename in filenames:
# 打印文件的完整路径
print(os.path.join(dirname, filename))
执行后会输出:
input/covid-19-nlp-text-classification/Corona_NLP_test.csv
input/covid-19-nlp-text-classification/Corona_NLP_train.csv
11.5.2 准备环境
下面代码导入了多个Python库,用于进行数据处理、机器学习、文本处理和可视化工作。主要包括NumPy、Pandas、TensorFlow、Matplotlib、Seaborn等。其中,对数据进行处理使用了正则表达式、NLTK(Natural Language Toolkit)和emoji库。在机器学习方面,使用了Scikit-learn中的文本特征提取和朴素贝叶斯模型。此外,还引入了Hugging Face的transformers库,用于使用BERT和roBERTa模型进行文本处理。在深度学习方面,使用了TensorFlow和Keras。最后,为了结果的可重现性,设置了一个种子(seed),并对绘图样式进行了一些配置。
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
import seaborn as sns
# 数据处理
import re, string
import emoji
import nltk
from sklearn import preprocessing
from imblearn.over_sampling import RandomOverSampler
from sklearn.model_selection import train_test_split
# 朴素贝叶斯
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
# Transformers
from transformers import BertTokenizerFast
from transformers import TFBertModel
from transformers import RobertaTokenizerFast
from transformers import TFRobertaModel
# Keras
import tensorflow as tf
from tensorflow import keras
# 指标
from sklearn.metrics import accuracy_score, f1_score
from sklearn.metrics import classification_report, confusion_matrix
# 为了可重复性设定种子
seed = 42
# 设定绘图风格
sns.set_style("whitegrid")
sns.despine()
plt.style.use("seaborn-whitegrid")
plt.rc("figure", autolayout=True)
plt.rc("axes", labelweight="bold", labelsize="large", titleweight="bold", titlepad=10)
11.5.3 绘制混淆矩阵热力图函数
定义函数conf_matrix(y, y_pred, title),用于绘制混淆矩阵热力图。通过传入真实标签 y、预测标签 y_pred 和图表标题 title,生成一个热力图,以可视化模型在分类任务中的性能。混淆矩阵的每个元素表示模型对应类别的预测情况,颜色深浅反映了预测的准确程度。
def conf_matrix(y, y_pred, title):
# 绘制混淆矩阵的热力图,用于评估模型性能
# y: 真实标签, y_pred: 预测标签, title: 图表标题
fig, ax = plt.subplots(figsize=(5, 5))
labels = ['Negative', 'Neutral', 'Positive']
ax = sns.heatmap(confusion_matrix(y, y_pred), annot=True, cmap="Blues", fmt='g', cbar=False, annot_kws={"size": 25})
plt.title(title, fontsize=20)
ax.xaxis.set_ticklabels(labels, fontsize=17)
ax.yaxis.set_ticklabels(labels, fontsize=17)
ax.set_ylabel('Test', fontsize=20)
ax.set_xlabel('Predicted', fontsize=20)
plt.show()