zoukankan      html  css  js  c++  java
  • 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)

    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.模型选择

    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)

    说明混淆矩阵的含义

    混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。

    每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目;

    每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目;

    每一列中的数值表示真实数据被预测为该类的数目。

    TP:真正类(True positive),样本的真实类别是正类,并且模型识别的结果也是正类。

    FN:假负类(False Negative),样本的真实类别是正类,但是模型将其识别成为负类

    FP:假正类(False positive),样本的真实类别是负类,但是模型将其识别成为正类

    TN:真负类(True Negative),样本的真实类别是负类,并且模型将其识别成为负类。

    from sklearn.metrics import classification_report

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

    (参考:https://blog.csdn.net/u013063099/article/details/80964865

    准确率(Accuracy):所有的预测正确(正类负类)的占总的比重。

    精确率(Precision):查准率,即正确预测为正的占全部预测为正的比例。

    召回率(Recall):查全率,即正确预测为正的占全部实际为正的比例。

    F1值(H-mean值):用来衡量二分类模型精确度的一种指标,同时兼顾了分类模型的精确率和召回率。

    F1值为算数平均数除以几何平均数,且越大越好,将Precision和Recall的上述公式带入会发现,当F1值小时,True Positive相对增加,而false相对减少,即Precision和Recall都相对增加,即F1对Precision和Recall都进行了加权。

    公式转化之后为:

    6.比较与总结

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

    CountVectorizer:

    只考虑词汇在文本中出现的频率

    TfidfVectorizer:

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

    能够削减高频没有意义的词汇出现带来的影晌,挖掘更有意义的特征

    CountVectorizer与TfidfVectorizer相比:

    混淆矩阵:真正类更少、假负类更多、假正类更少、真负类更多。

    分类报告:准确率更高、综合精确率(查准率)更低、综合召回率(查全率)更高、F1值更高

    模型准确率也更高。

    通过上面的对比结果,感觉用CountVectorizer效果好,但是用TfidfVectorizer可以削减高频没有意义的词汇,应用于实际更有意义,实际效果也会更好。

  • 相关阅读:
    Spring:(八) mybatis-spring整合
    Spring:(七) Aop
    spring boot中@ControllerAdvice的用法
    spring boot中注册拦截器
    spring boot 中通过CORS实现跨域
    spring boot 中的路径映射
    浅析java中的string
    java并发编程如何预防死锁
    Redis集群增加节点和删除节点
    Redis删除集群以及重新启动集群
  • 原文地址:https://www.cnblogs.com/linyanli/p/12929489.html
Copyright © 2011-2022 走看看