作家
登录

手把手教你用 Python 和 Scikit-Learn 实现垃圾邮件过滤

作者: 来源: 2017-07-20 14:06:54 阅读 我要评论

del dictionary[item] 
  •     elif len(item) == 1
  •         del dictionary[item] 
  • dictionary = dictionary.most_common(3000
  • 这里经由过程输入 print dictionary 指令就可以输出词典。须要留意的是,你在打印输出的词典里可能会看到很多可有可无的词,这一点无需担心,因为我们在后续的步调中老是有机会对其进行调剂的。别的,如不雅你是严格按照上文提到的数据集操作的话,那么你的词典里应当会有以下这些高频词(本例中我们拔取了频率最高的 3000 个词):

    [('order', 1414), ('address', 1293), ('report', 1216), ('mail', 1127), ('send', 1079), ('language', 1072), ('email', 1051), ('program', 1001), ('our', 987), ('list', 935), ('one', 917), ('name', 878), ('receive', 826), ('money', 788), ('free', 762)

      3. 特点提取

    词典预备好之后,我们就可以对练习集里的每一封邮件提取维度是 3000 的词数向量 word count vector(这个向量就是我们的特点),每一个词数向量都包含之前选定的 3000 个高频词具体的出现频率。当然,你可能猜到了,大年夜部分出现的频率应当会是 0。举个栗子:比如我们字典里有 500 个词,每个词数向量包含了练习集里这 500 个词典出现频率。假设练习集有一组文本:“Get the work done, work done”。那么,这句话对应的词数向量应当是如许的:[0,0,0,0,0,…….0,0,2,0,0,0,……,0,0,1,0,0,…0,0,1,0,0,……2,0,0,0,0,0]。在这里,句中的每个词出现的频率都能显示出来:这些词分别对应长度为 500 的词数向量中的第 296,359,415 和 495 的地位,其他地位显示为 0。

    在这里我们会应用 scikit-learn 机械进修库来练习分类器,scikit-learn 库的相干链接如下:

    最后,博客中提到的完全 python 代码详见如下链接:

    下面这个 python 函数会赞助我们生成一个特点向量矩阵,该矩阵有 700 行 3000 列。个中每一行代表练习集中 700 封邮件的的每一封邮件,每一列代表词典中的 3000 个关键词。在 “ij” 地位上的值代表了词典中第 j 个词在该邮件(第 i 封)中出现的次数。

    http://t.cn/SMzAoZ

    这是一个绑定在第三方 python 发行版 Anaconda 的开源机械进修库,可以跟随 Anaconda 一同下载安装,或者也可以按照以下链接中的提示自力安装:

    http://t.cn/8kkrVlQ

    这里我们练习了两个模型,分别是朴实贝叶斯分类器和 SVM(支撑向量机)。朴实贝叶斯分类器是一个传统的监督型概率分类器,在文本分类的场景中非经常用,它基于贝叶斯定理,假设每一对特点都是互相自力的。SVM 是监督型的二分类器,面对特点数量较多的场景时异常有效,其最注目标是大年夜练习数据平分别出一组子集,称为支撑向量(分别超平面的界线)。剖断测试数据最终类其余 SVM 决定计划函数恰是基于该支撑向量和内核技能(kernel trick)的。

    分类器练习完成后,我们可以在测试集上测试模型的机能。这里我们为测试集中的每封邮件提取字数向量,然后悠揭捉?练好的朴实贝叶斯分类器和 SVM 模型,猜测它的类别(通俗邮件或垃圾邮件)。下面是垃圾邮件分类器的完全 python 代码,别的还须要包含我们在步调 2 和步调 3 中定义的两个函数。

    1. import os 
    2. import numpy as np 
    3. from collections import Counter 
    4. from sklearn.naive_bayes import MultinomialNB, GaussianNB, BernoulliNB 
    5. from sklearn.svm import SVC, NuSVC, LinearSVC 
    6. from sklearn.metrics import confusion_matrix  
    7. # Create a dictionary of words with its frequency 
    8.  
    9. train_dir = 'train-mails' 
    10. dictionary = make_Dictionary(train_dir) 
    11.  
    12. # Prepare feature vectors per training mail and its labels 
    13.  
    14. train_labels = np.zeros(702
    15. train_labels[351

        推荐阅读

        云知声梁家恩:智能语音需攻克的难点在哪?

      【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! 云知声CTO梁家恩 梁家恩,云知声CTO.2001年卒业于中国科技大年夜学,2006年卒业于中国科学院主动化研究所,获博士学>>>详细阅读


      本文标题:手把手教你用 Python 和 Scikit-Learn 实现垃圾邮件过滤

      地址:http://www.17bianji.com/lsqh/36312.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)