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如何实现远程控制电脑(结合微信)
Dec 21 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python 将pdf转成图片的方法
Apr 23 Python
基于MTCNN/TensorFlow实现人脸检测
May 24 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
Python3简单实现串口通信的方法
Jun 12 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
使用pickle存储数据dump 和 load实例讲解
Dec 30 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
浅谈PyTorch中in-place operation的含义
Jun 27 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
Pillow图像处理库安装及使用
Apr 12 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Document对象内容集合(比较全)
2010/09/06 Javascript
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
python 录制系统声音的示例
2020/12/21 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
几个常见的软件测试问题
2016/09/07 面试题
经典优秀个人求职自荐信格式
2013/09/25 职场文书
村优秀党员事迹材料
2014/01/15 职场文书
教师一帮一活动总结
2014/07/08 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
小孩不笨观后感
2015/06/03 职场文书
死亡诗社观后感
2015/06/05 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
导游词之山东八大关
2019/12/18 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL