平时作业of彭宇昊

Signed-off-by: 彭宇昊 <13190710+yuhao-peng@user.noreply.gitee.com>
This commit is contained in:
彭宇昊
2023-07-17 04:59:00 +00:00
committed by Gitee
parent 6f6926201e
commit 9d4cc0521d
3 changed files with 69 additions and 0 deletions
@@ -0,0 +1,69 @@
import pandas as pd
import re
import jieba
import pickle
from wordcloud import WordCloud#安装wordcloud要输入后面的那个,而不是前面的,就像安装opencv,要装cv2
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_csv('message80W1.csv', header=None, index_col=0)
data.columns = ['label', 'message']
n = 5000
a = data[data['label'] == 0].sample(n)
b = data[data['label'] == 1].sample(n)
newdata = pd.concat([a, b], axis=0)
dupdata = newdata['message'].drop_duplicates()
qumindata = dupdata.apply(lambda x: re.sub('x', '', x))
# 读取自定义的分词词典
jieba.load_userdict('newdic1.txt')
data_cut = qumindata.apply(lambda x: jieba.lcut(x))
# 读取停用词表去停用词
stopWords = pd.read_csv('stopword.txt', encoding='GB18030', sep='hahaha', header=None)
stopWords = ['', '', '', '', ' ', '', '', '', ''] + list(stopWords.iloc[:, 0])
dataafterstop = data_cut.apply(lambda x: [i for i in x if i not in stopWords])
labels = newdata.loc[dataafterstop.index, 'label']
# join函数将分词后的数据转换为字符串
adata = dataafterstop.apply(lambda x: ' '.join(x))
# 划分数据集
data_tr, data_te, labels_tr, labels_te = train_test_split(adata, labels, test_size=0.15)
# 转词向量
countVectorizer = CountVectorizer()
# 训练集
data_tr = countVectorizer.fit_transform(data_tr)
X_tr = TfidfTransformer().fit_transform(data_tr.toarray()).toarray()
# 测试集
data_te = CountVectorizer(vocabulary=countVectorizer.vocabulary_).fit_transform(data_te)
X_te = TfidfTransformer().fit_transform(data_te.toarray()).toarray()
model = GaussianNB()
model.fit(X_tr, labels_tr)
pred = model.predict(X_te)
score = model.score(X_te, labels_te)
# 使用pickle模块保存模型
with open('model.pkl', 'wb') as f:
pickle.dump(model, f)
# 保存词向量模型
with open('countVectorizer.pkl', 'wb') as f:
pickle.dump(countVectorizer, f)
# 绘制混淆矩阵
sns.heatmap(confusion_matrix(labels_te,pred),annot=True)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title("混淆矩阵")
plt.show()
## 绘制词云
word_fre = {}
for i in dataafterstop[labels == 0]:
for j in i:
if j not in word_fre.keys():
word_fre[j] = 1
else:
word_fre[j] += 1
wc = WordCloud( background_color='white', font_path=r'C:/Windows/Fonts/STKAITI.TTF')#换一个长方形的边框,同时变成华文楷体
wc.fit_words(word_fre)
plt.imshow(wc)
plt.show()
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB