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
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的主要内容,如果未能解决你的问题,请参考以下文章