13-垃圾邮件分类2
Posted ljm41
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)
●# data :所要划分的样本特征集
●# target :所要划分的样本结果集
●#test_size :样本占比,如果是整数的话就是样本的数量
●# random_state :是随机数的种子,其实就是该组随机数的编号, 在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
●类分布不平衡的情况下会用到stratify。将stratify=X就是按照X中的比例分配,将stratify=y就是按照y中的比例分配
测试模型好不好要用模型之前没见过的邮件
4.文本特征提取
sklearn.feature_extraction.text.CountVectorizer
sklearn.feature_extraction.text.TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf2 = TfidfVectorizer()
●将文本数据转化成特征向量的过程,比较常用的文本特征表示法为词袋法
●词集: 0、1
●词袋模型:
●不考虑词语出现的顺序,每个出现过的词汇单独作为-列特征,这些不重复的特征词汇集合为词表
●每一个文本都可以在很长的词表上统计出一个很多列的特征向量
●如果每个文本都出现的词汇,一般被标记为停用词不计入特征向量
主要有两个api来实现CountVectorizer和TfidfVectorizer
●CountVectorizer :
●只考虑词汇在文本中出现的频率
●TfidfVectorizer :
●除了考量某词汇在本文本出现的频率,还关注包含这个词汇的其它文本的数量
●能够削减高频没有意义的词汇出现带来的影响,挖掘更有意义的特征
观察邮件与向量的关系
向量还原为邮件
4.模型选择
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
说明为什么选择这个模型?
多项式朴素贝叶斯分类器适用于离散特征的情况,常用于文本分类,特征是单词,值是单词的出现次数。而高斯模型是将特征为连续型变量的值转化为离散型变量的值,比如说人的身高,物体的长度,这些特征可以转换成离散型的值。
5.模型评价:混淆矩阵,分类报告
from sklearn.metrics import confusion_matrix
confusion_matrix = confusion_matrix(y_test, y_predict)
说明混淆矩阵的含义
●混淆矩阵confusion-matrix
●TP(True Positive):真实为0 ,预测也为0
●FN(False Negative):真实为0 ,预测为1
●FP(False Positive):真实为1 , 预测为0
●TN(True Negative):真实为1 ,预测也为1
from sklearn.metrics import classification_report
说明准确率、精确率、召回率、F值分别代表的意义
6.比较与总结
如果用CountVectorizer进行文本特征生成,与TfidfVectorizer相比,效果如何?
对于每一个训练文本,CountVectorizer只考虑每种词汇在该训练文本中出现的频率,而TfidfVectorizer除了考量某一词汇在当前训练文本中出现的频率之外,同时关注包含这个词汇的其它训练文本数目的倒数。相比之下,训练文本的数量越多,TfidfVectorizer这种特征量化方式就更有优势。
以上是关于13-垃圾邮件分类2的主要内容,如果未能解决你的问题,请参考以下文章