https://www.xin3721.com/eschool/pythonxin3721/

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程>>戳此了解

导语

利用简单的机器学习算法实现垃圾邮件识别。

让我们愉快地开始吧~

相关文件

百度网盘下载链接: https://pan.baidu.com/s/1Hsno4oREMROxWwcC_jYAOA

密码: qa49

数据集源于网络,侵歉删。

开发工具

Python版本:3.6.4

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

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

逐步实现

(1)划分数据集

网上用于垃圾邮件识别的数据集大多是英文邮件,所以为了表示诚意,我花了点时间找了一份中文邮件的数据集。数据集划分如下:

训练数据集:

7063封正常邮件(data/normal文件夹下);

7775封垃圾邮件(data/spam文件夹下)。

测试数据集:

共392封邮件(data/test文件夹下)。

(2)创建词典

数据集里的邮件内容一般是这样的:

首先,我们利用正则表达式过滤掉非中文字符,然后再用jieba分词库对语句进行分词,并清除一些停用词,最后再利用上述结果创建词典,词典格式为:

{"词1": 词1词频, "词2": 词2词频...}

这些内容的具体实现均在"utils.py"文件中体现,在主程序中(train.py)调用即可:

最终结果保存在"results.pkl"文件内。

大功告成了么?当然没有!!!

现在的词典里有52113个词,显然太多了,有些词只出现了一两次,后续特征提取的时候一直空占着一个维度显然是不明智的做法。因此,我们只保留词频最高的4000个词作为最终创建的词典:

最终结果保存在"wordsDict.pkl"文件内。

(3)特征提取

词典准备好之后,我们就可以把每封信的内容转换为词向量了,显然其维度为4000,每一维代表一个高频词在该封信中出现的频率,最后,我们将这些词向量合并为一个大的特征向量矩阵,其大小为:

(7063+7775)×4000

即前7063行为正常邮件的特征向量,其余为垃圾邮件的特征向量。

上述内容的具体实现仍然在"utils.py"文件中体现,在主程序中调用如下:

最终结果保存在"fvs_%d_%d.npy"文件内,其中第一个格式符代表正常邮件的数量,第二个格式符代表垃圾邮件的数量。

(4)训练分类器

我们使用scikit-learn机器学习库来训练分类器,模型选择朴素贝叶斯分类器和SVM(支持向量机):

(5)性能测试

利用测试数据集对模型进行测试:

结果如下:

可以发现两个模型的性能是差不多的(SVM略胜于朴素贝叶斯),但SVM更倾向于向垃圾邮件的判定。

That's all~

完整源代码请参见相关文件。

更多

没有具体介绍模型原理,因为后续可能会出一个系列,比较完整详细地介绍一下机器学习里的常用算法。所以,就先这样吧~

python发邮件不进入垃圾箱_Python识别垃圾邮件|python3教程|python入门|python教程相关推荐

  1. python垃圾邮件识别_Python贝叶斯推理垃圾邮件分类

    针对贝叶斯垃圾邮件分类,阮一峰大神在多年前曾经写过一篇博客文章,他写的有些观点看起来很简单明了,不过我有点不是很理解其推导过程,虽然最后的结果等价,但是我还是觉得他的那套简单推导,感觉不太容易理解,可 ...

  2. Python识别垃圾邮件

    导语 利用简单的机器学习算法实现垃圾邮件识别. 让我们愉快地开始吧~ 相关文件 百度网盘下载链接: https://pan.baidu.com/s/1Hsno4oREMROxWwcC_jYAOA 密码 ...

  3. 《Web安全之机器学习入门》笔记:第十五章 15.7与15.8 TensorFlow识别垃圾邮件

    本小节通过识别垃圾邮件,讲解tensorflow通过神经网络DNN在网络安全方向的应用,同时还对比了NB算法的垃圾邮件识别效果. 1.数据集与特征化 本小节使用SpamBase这个入门级垃圾邮件数据集 ...

  4. 利用朴素贝叶斯算法识别垃圾邮件

    转载自:http://blog.csdn.net/wowcplusplus/article/details/25190809 朴素贝叶斯算法是被工业界广泛应用的机器学习算法,它有较强的数学理论基础,在 ...

  5. [转]免费邮件服务器hMailServer搭配SpamAssassin过滤垃圾邮件:安装和设置

    [转]免费邮件服务器hMailServer搭配SpamAssassin过滤垃圾邮件:安装和设置 (转自http://dagai.net/archives/838) 为了解决垃圾信泛滥的状况,这两天「跨 ...

  6. python:基于朴素贝叶斯算法的垃圾邮件过滤分类

    目录 一.朴素贝叶斯算法 1.概述 2.推导过程 二.实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog ...

  7. python文件转换成jar包_Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 今天的这篇文章,聊一个轩辕君之前工作中遇到的需求:如何在Jav ...

  8. python选择某一行_Python常用语法有哪些 如何快速入门Python开发

    Python常用语法有哪些?如何快速入门Python开发?Python编程语言是最容易学习.并且功能强大的语言,吸引了很多人学习入行.很多人想知道如何快速入门Python开发,接下来就给大家分享Pyt ...

  9. python怎么打开程序管理器_python进程管理工具supervisor的安装与使用教程

    前言 在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便.如果有一个工具能够实现每台机器上多个进程的简单高效中心化 ...

最新文章

  1. c语言实现 十进制到二进制的转换
  2. 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析 检测点3.2
  3. 学Linux的你还在为正则表达式而挠头?
  4. 047_CSS3多列
  5. 从hotspot底层对象结构理解锁膨胀升级过程||深入jdk源码理解longadder的分段cas优化机制——分段CAS优化
  6. 小程序promise封装post请求_微信小程序 es6-promise.js封装请求与处理异步进程
  7. JQuery Datatables editor 在编辑前刷新数据
  8. nlp中region_百度5年深耕NLP 他把聊天机器人变成你的“全科医生”
  9. 安全测试工具APPScan下载安装及简单使用
  10. VSCode中安装Django插件后实现html语法提示
  11. Typora简易教程
  12. win7与internet时间同步出错_windows7 internet系统时间同步出错超时怎么办?国内NTP时间同步服务器地址...
  13. sqlite查询空日期类型_sqlite数据类型(时间 日期 ) timestamp 使用
  14. 7-4 换硬币(20 分)
  15. 【产品经理学习笔记】Part 13 产品运营案例分析
  16. linux命令:killall
  17. 网络表示学习Network Representation Learning/Embedding
  18. ArcGis Pro | 建筑3D视线可见性:构造视线 计算通视性
  19. Android手机,charles安装证书时提示“键入凭据存储的密码”问题
  20. 我在网上找到了新家:99盘

热门文章

  1. 传统大数据平台的一些常见问题
  2. 达梦数据库DCA认证培训笔记
  3. Visual Studio 2019安装vsix插件及Gitee.VisualStudio安装包
  4. 华硕主板使用nt6 oem loader激活之后重启卡在ASUS LOGO位置无法进入BIOS界面
  5. vantui van-field输入框右边加单位
  6. 字节加入“大模型之战”;网易已自研数十个超大规模预训练模型;英伟达2023财年净利润同比下滑55%丨每日大事件...
  7. X64驱动开发和保护+X86X64游戏逆向分析课程
  8. 国内 3 大物联网设备 OTA 服务选型指南
  9. 一些计算机视觉企业方面的网站
  10. 设定自动弹窗html,javascript如何设置弹窗?