13-垃圾邮件分类2

Posted szzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13-垃圾邮件分类2相关的知识,希望对你有一定的参考价值。

1.读取

2.数据预处理

3.数据划分—训练集和测试集数据划分

from sklearn.model_selection import train_test_split

x_train,x_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=0, stratify=y_train)

emails=pd.read_csv("new_email.csv") #要import pandas as pd
data=emails.iloc[:,1] #邮箱文本样本
labels=emails.iloc[:,0]  #邮箱标签,垃圾邮件还是普通邮件

from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test=train_test_split(data,labels,test_size=0.2,random_state=0,stratify=labels)
print(训练样本个数:,len(x_train),测试样本个数:,len(x_test),训练标签个数:,len(y_train),测试标签个数:,len(y_test))

4.文本特征提取

sklearn.feature_extraction.text.CountVectorizer

https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html?highlight=sklearn%20feature_extraction%20text%20tfidfvectorizer

sklearn.feature_extraction.text.TfidfVectorizer

https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html?highlight=sklearn%20feature_extraction%20text%20tfidfvectorizer#sklearn.feature_extraction.text.TfidfVectorizer

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf2 = TfidfVectorizer()

观察邮件与向量的关系

向量还原为邮件

# 4、文本特征提取---词袋模型
# TfidfVectorizer除了考虑词汇在本文中出现的频率,还考虑在别的文本中出现的频率
from sklearn.feature_extraction.text import TfidfVectorizer

tfdvect=TfidfVectorizer()
X_train=tfdvect.fit_transform(x_train) #向量化
X_test=tfdvect.transform(x_test) #向量化

X_train.toarray().shape  #(4457, 6719)  6719是词汇表个数
X_test.toarray().shape
tfdvect.vocabulary_ #词汇表

 

4.模型选择

from sklearn.naive_bayes import GaussianNB

from sklearn.naive_bayes import MultinomialNB

说明为什么选择这个模型?

from sklearn.naive_bayes import MultinomialNB

mnb=MultinomialNB() #构造模型
mnb.fit(X_train,y_train) #训练模型
y_pre=mnb.predict(X_test) #预测
print(预测值,y_pre,
,"真实值",y_test)
print(不符合预测值的个数:,(y_pre!=y_test).sum(),"符合预测的个数",(y_pre==y_test).sum())

5.模型评价:混淆矩阵,分类报告

from sklearn.metrics import confusion_matrix

confusion_matrix = confusion_matrix(y_test, y_predict)

说明混淆矩阵的含义

from sklearn.metrics import classification_report

说明准确率、精确率、召回率、F值分别代表的意义

 

# 5、模型评估
from sklearn.metrics import confusion_matrix #混淆矩阵
from sklearn.metrics import classification_report #回归报告
import numpy as np

con_m=confusion_matrix(y_test,y_pre)
print("混淆矩阵",con_m)
print((con_m[0][0]+con_m[1][1])/np.sum(con_m))
c_r=classification_report(y_test,y_pre)
print("回归报告:
",c_r)

6.比较与总结

如果用CountVectorizer进行文本特征生成,与TfidfVectorizer相比,效果如何?

 CountVectorizer:只考虑每个单词出现的频率;然后构成一个特征矩阵,每一行表示一个训练文本的词频统计结果。

 TfidfVectorizer:除了考量某词汇在本文本出现的频率,还关注包含这个词汇的其它文本的数量。

 

以上是关于13-垃圾邮件分类2的主要内容,如果未能解决你的问题,请参考以下文章

13-垃圾邮件分类2

13-垃圾邮件分类2

13-垃圾邮件分类2

13.垃圾邮件分类2

13-垃圾邮件分类2

13-垃圾邮件分类2