朴素贝叶斯之垃圾邮件自动识别系统

该垃圾邮件自动识别系统的实现是基于朴素贝叶斯分类法的应用,主要使用的是Python语言。在项目初期,也是参考了一些网址,然后根据自己的理解画系统流程图并进行编程。(如:http://blog.csdn.net/shijing_0214/article/details/51200965)

给大家分享一些写类似任务的项目文档说明的技巧:一般从原理分析、识别过程和结果分析三方面进行阐述。原理分析主要是介绍朴素贝叶斯分类法的特点及重要公式,如贝叶斯公式、全概率公式(注意公式转换)。明确项目的核心思想:计算分词后的已知词向量w的条件下求包含该词向量的邮件是否是垃圾邮件的概率;识别过程可以借鉴文本分类流程(1.预处理 2.文本表示及特征选择 3.构造分类器 4.分类);结果分析主要是检验分类的准确性,要计算预测结果的正确率。下面是核心代码以及自己画的流程图的展示,编程以它展开实现。

 #通过计算每个文件中p(s|w)来得到对分类影响最大的词
    def getTestWords(self,testDict,spamDict,normDict,normFilelen,spamFilelen):
        #wordProbList是词与P(s|w)的映射
        wordProbList={}
        for word,num  in testDict.items():
            if word in spamDict.keys() and word in normDict.keys():
                pw_s=spamDict[word]/spamFilelen
                pw_n=normDict[word]/normFilelen
                ps_w=pw_s/(pw_s+pw_n) 
                wordProbList.setdefault(word,ps_w)
            if word in spamDict.keys() and word not in normDict.keys():
                pw_s=spamDict[word]/spamFilelen
                pw_n=0.01
                ps_w=pw_s/(pw_s+pw_n) 
                wordProbList.setdefault(word,ps_w)
            if word not in spamDict.keys() and word in normDict.keys():
                pw_s=0.01
                pw_n=normDict[word]/normFilelen
                ps_w=pw_s/(pw_s+pw_n) 
                wordProbList.setdefault(word,ps_w)
            if word not in spamDict.keys() and word not in normDict.keys():
                wordProbList.setdefault(word,0.4)
        #排序方法,按照每个键值对中的值(即P(s|w))从大到小排序的前15个词
        sorted(wordProbList.items(),key=lambda d:d[1],reverse=True)[0:15]
        return (wordProbList)

 

朴素贝叶斯之垃圾邮件自动识别系统_第1张图片

 

你可能感兴趣的:(python)