模式识别贝叶斯分类器实现垃圾邮件分类代码全

本文介绍了一个使用Python的贝叶斯模型实现垃圾邮件分类的项目,涉及词频统计、特征提取、概率计算等步骤。通过jieba分词、停用词过滤、正则表达式处理,构建词向量矩阵,再计算每封邮件的贝叶斯概率以判断垃圾邮件。在392封邮件测试集中,分类准确率达到95.15%。
摘要由CSDN通过智能技术生成

1.1 题目的主要研究内容

(1)工作的主要描述

利用贝叶斯模型实现简单的垃圾邮件分类,将正常邮件和垃圾邮件分别识别出来并分类。

  1. 系统流程图

1.2 题目研究的工作基础或实验条件

软件环境:Windows10

Python版本:3.7

相关模块:scikit-learn模块;jieba模块;numpy模块;以及⼀些Python⾃带的模块。

1.3 数据集描述

使用的中文邮件数据集和中文停用词表,其中spam文件夹中有7775封垃圾邮件,normal文件夹中有7063封正常邮件,test文件夹中有392封测试邮件,test文件夹中,文件名在1至200的为正常邮件,文件名7801~8000的为垃圾邮件。

1.4 特征提取过程描述

由于词典里的词数量太多,只保留了词频最高的4000个词作为最终创建的词典。词典准备好之后,把每封信的内容转换为词向量,其维度为4000,每一维代表一个高频词在该邮件中出现的频率,最后将这些词向量合并为一个大的特征向量矩阵,其大小为:(7063+7775)×4000,即前7063行为正常邮件的特征向量,其余为垃圾邮件的特征向量。

1.5 分类过程描述

对测试集中的每一封邮件用结巴分词,并用停用表进行简单过滤,然后使用正则表达式过滤掉邮件中的非中文字符,并计算得到P(s|w)(在已知词向量w的条件下求包含该词向量邮件是否为垃圾邮件的概率,s表示分类为垃圾邮件)最高的15个词,在计算过程中,若该词只出现在垃圾邮件的词典中,则令P(w|s')=0.01,反之亦然;若都未出现,则令P(s|w)=0.4(这里做的几个假设基于前人做的一些研究工作得出的)。然后计算得到的每封邮件中重要的15个词的贝叶斯概率,若概率>阈值α,则判为垃圾邮件,否则判为正常邮件。

1.6 主要程序代码

功能函数:

import jieba;

import os;

class spamEmailBayes:

    # 获得中文停用词表

    def getStopWords(self):

        stopList=[]

        for line in open("../data/中文停用词表.txt"):

            stopList.append(line[:len(line)-1])

        return stopList;

    # 分别保存正常邮件与垃圾邮件中出现的词有多少邮件出现该词,得到两个词典

    def get_word_list(self,content,wordsList,stopList):

        #分词结果放入res_list

        res_list = list(jieba.cut(content))

        for i in res_list:

            if i not in stopList and i.strip()!='' and i!=None:

                if i not in wordsList:

                    wordsList.append(i)

                    

    # 若列表中的词已在词典中,则加1,否则添加进去

    def addToDict(self,wordsList,wordsDict):

        for item in wordsList:

            if item in wordsDict.keys():

                wordsDict[item]+=1

            else:

                wordsDict.setdefault(item,1)

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李逍遥敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值