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可以削减高频没有意义的词汇,应用于实际更有意义,实际效果也会更好。

  • 相关阅读:
    在TreeView控件节点中显示图片
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1145 Hashing
    PAT 甲级 1145 Hashing
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1149 Dangerous Goods Packaging
  • 原文地址:https://www.cnblogs.com/linyanli/p/12929489.html
Copyright © 2011-2022 走看看