目录

一、数据预处理
二、训练
三、测试
四、全部代码及数据集

一、数据预处理

经过常用的数据预处理,如删除停用词等后,统计所有训练集中垃圾邮件的内容,经分词后输出频次,得到垃圾邮件的特征库并画出词云图

background_image = np.array(Image.open('001.png'))
colormaps = colors.ListedColormap(['#871A84', '#BC0F6A', '#BC0F60', '#CC5F6A', '#AC1F4A'])
wordcloud = WordCloud(font_path='simhei.ttf',  # 字体prefer_horizontal=0.99,background_color='white',  # 背景色max_words=200,  # 显示单词数max_font_size=200,  # 最大字号stopwords=stop,  # 过滤噪声词mask=background_image,  # 背景轮廓colormap=colormaps,  # 使用自定义颜色collocations=False).fit_words(dict)
image = wordcloud.to_image()
image.show()  # 展示图片
wordcloud.to_file('词云图.png')  # 保存图片片

二、训练

普通的朴素贝叶斯训练过程,本实验采用定义来做,并没有调用库。最终利用GUI可视化来训练过程和结果
本实验可以通过GUI界面更改垃圾邮件的权重,训练集和测试集的比例,选择是否加权等。

def test(row):# 总邮件数量total = ham + spamwordDict = row['wordDict']V = len(wordDict)# 正常邮件概率,取对数防止数值过小,取对数不影响概率的比较hp = math.log(float(ham) / total)# 垃圾邮件概率sp = math.log(float(spam) / total)for w in wordDict:w = w.strip()# 在统计词典中查找该词,未查找到则赋予默认值countDict.setdefault(w, {0: 0, 1: 0})  # w[0]=0, w[1]=0pih = countDict[w][0]  # 该词在词典中正常邮件出现的次数pis = countDict[w][1]  # 该词在词典中垃圾邮件出现的次数# 平滑处理,防止出现零概率, 每个词汇基数+1,正常邮件数+2(因为有两种类型邮件所以+2)# 因为取对数,可以将概率的逐个相乘转化为逐个相加if m == '是':Wh = ((pih + 1) / (ham + 2)) / ((pis + 1) / (spam + 2))Ws = ((pis + 1) / (spam + 2)) / ((pih + 1) / (ham + 2))hp += ((math.log((float(pih) + 1) / (ham + 2)) + 10) * Wh)sp += ((math.log((float(pis) + 1) / (spam + 2)) + 10) * Ws)else:Wh = (pih + 1) / (ham + V)Ws = (pis + 1) / (spam + V)hp += math.log(float(Wh))sp += math.log(float(Ws))# 得到预测结果# predict = 1 if sp > hp else 0 # 直接比较predict = 1 if sp > hp * k else 0# print("hp=", hp)# print("sp=", sp)# print("=======================")# 判断预测值跟真实值是否相符return 1 if predict == row['spam'] else 0

三、测试

新增黑白名单功能
先经过黑白名单的检测再输出结果
运用一个简单的判断语句:

for email in emails_found:if email in white_emails_to_compare:print(f'发件人{email} 在白名单内')elif email in black_emails_to_compare:print(f'发件人{email} 在黑名单内')else:print(f'发件人{email} 既不在黑名单也不在白名单')

四、全部代码及数据集

基于朴素贝叶斯的垃圾邮件分类系统(包含黑白名单和特征库功能)相关推荐

  1. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说

    Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报  分类: 机器学习(19)  听说朴 ...

  2. 基于朴素贝叶斯的垃圾邮件分类-着重理解拉普拉斯变换

    1. 引言 在正式学习朴素贝叶斯之前,需要明确的是机器学习所要实现的是基于有限的训练样本集尽可能准确地估计出后验概率P(c|x),即根据特征得到所属类别的概率,首先引入两个概念. 判别式模型(disc ...

  3. 朴素贝叶斯法 - 垃圾邮件分类

    本文基于朴素贝叶斯构建一个分类垃圾邮件的模型,研究对象是英文的垃圾邮件. 邮件内容保存在txt文件中,其中分为训练样本train和测试样本test. 在训练样本中正常邮件命名为:pos:垃圾邮件命名为 ...

  4. AI基础:朴素贝叶斯与垃圾邮件分类

    来,继续回顾基础算法 文章目录 背景&贝叶斯原理 贝叶斯分类器 朴素贝叶斯分类器 西瓜数据集下的朴素贝叶斯示例 朴素贝叶斯分类的优缺点 朴素贝叶斯关键问题 朴素贝叶斯企业中的应用案例 基于朴素 ...

  5. 机器学习--使用朴素贝叶斯进行垃圾邮件分类

    一.学习背景 垃圾邮件的问题一直困扰着人们,传统的垃圾邮件分类的方法主要有"关键词法"和"校验码法"等,然而这两种方法效果并不理想.其中,如果使用的是" ...

  6. [CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑

    本文对应的是吴恩达老师的CS229机器学习的第五课.这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类. 判别学习(Discriminative L ...

  7. 朴素贝叶斯(垃圾邮件分类)

    一.基于贝叶斯决策理论的分类方法 朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比 ...

  8. 基于朴素贝叶斯的垃圾邮件分类器Java实现和讲解

    朴素贝叶斯算法最典型的应用就是垃圾邮件的识别,在数据量非常大的情况下,识别的正确率可以达到接近100%,同时实现起来思路并不复杂.本文介绍的就是基于朴素贝叶斯算法的垃圾邮件识别的实现.如果之前对贝叶斯 ...

  9. Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制

    封面图片:<Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社 图书详情(京东): ================= 关于朴素贝叶斯算法中文垃圾邮件分 ...

最新文章

  1. Oracle truncate、 delete、 drop区别
  2. 【Spark Summit East 2017】Kerberizing Spark
  3. Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读
  4. Httpwatch 工具介绍
  5. java类名变量_java类名操作变量方法
  6. [UWP]针对UWP程序多语言支持的总结,含RTL
  7. 【2018.3.17】模拟赛之四-ssl1864jzoj1368 燃烧木棒【最短路,Floyd】
  8. 咨询14个CEO,花了20小时,建设顶级数据团队的干货,被疯狂点赞
  9. 崇胜云转码系统开源版
  10. linux进程闭锁,4. ps 进程查看器
  11. 西北大学计算机学院王郭玲,西北大学关于表彰2010-2011学年度学生先进集体
  12. 单片机的c语言程序控制直流电机,(单片机控制直流电机)毕业论文.doc
  13. Lua脚本语言——Lua脚本基础语法
  14. 21世纪最需要的7种人才
  15. 对角安装的双舵轮AGV运动学核心算法
  16. Linus 一生只为寻找欢笑(下)-转
  17. 裸机运行c语言,裸机_GPIO实验_C语言
  18. NILM:非侵入式电力负荷监测之我见(一)
  19. 仿新浪抢工长装修招标网站源码老工长装修网源码装修网站源码
  20. Android小窗口模式,picture-in-picture(PIP画中画)的使用

热门文章

  1. Skill Set Of IT Project Manager (IT项目管理者应具备的能力)
  2. Microbiome | 吉林大学付云贺组揭示“瘤胃/肠道源性乳腺炎”的新机制
  3. Python基础:使用neuralart进行图像处理
  4. 按八个小时算,一天骑行多少公里合适?
  5. linux-文件查找和压缩、软件包管理、sed文本处理
  6. non-blocking I/O 和 blocking I/O 区别
  7. 【Java里的CAS机制】什么是CAS,CAS机制
  8. 【Windows】Windows11笔记本查看电池实际容量
  9. 模糊控制之Sigmoidmf隶属度函数( PLC SCL代码)
  10. 微信聊天功能测试用例