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


Posted in Python onJune 28, 2021

开发工具

**Python版本:**3.6.4

相关模块:

scikit-learn模块;

jieba模块;

numpy模块;

以及一些Python自带的模块。

环境搭建

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

逐步实现

(1)划分数据集

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

训练数据集:

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

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

测试数据集:

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

(2)创建词典

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

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

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

{“词1”: 词1词频, “词2”: 词2词频…}

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

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

最终结果保存在**“results.pkl”**文件内。

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

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

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

最终结果保存在**“wordsDict.pkl”**文件内。

(3)特征提取

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

(7063+7775)×4000

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

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

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

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

(4)训练分类器

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

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

(5)性能测试

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

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

结果如下:

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

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

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

到此这篇关于Python实现垃圾邮件的识别的文章就介绍到这了,更多相关Python识别垃圾邮件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
在Python中使用元类的教程
Apr 28 Python
Python实现的彩票机选器实例
Jun 17 Python
全面理解Python中self的用法
Jun 04 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
详解如何用django实现redirect的几种方法总结
Nov 22 Python
Python下简易的单例模式详解
Apr 08 Python
Django 用户认证组件使用详解
Jul 23 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
python 读取串口数据的示例
Nov 09 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
PHP配置文件中最常用四个ini函数
2007/03/19 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
Node.js的特点详解
2017/02/03 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
python清除字符串里非数字字符的方法
2015/07/02 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Django app配置多个数据库代码实例
2019/12/17 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
工作表扬信的范文
2014/01/10 职场文书
团日活动总结报告
2014/06/25 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书