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实现的登录和操作开心网脚本分享
Jul 09 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
python的concat等多种用法详解
Nov 28 Python
Python装饰器用法实例分析
Jan 14 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
python实现TCP文件传输
Mar 20 Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
php4的session功能评述(二)
2006/10/09 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
判断对象是否Window的实现代码
2012/01/10 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
python实现在windows下操作word的方法
2015/04/28 Python
Python升级导致yum、pip报错的解决方法
2017/09/06 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
Python制作词云图代码实例
2019/09/09 Python
使用python实现画AR模型时序图
2019/11/20 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
python利用opencv保存、播放视频
2020/11/02 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
华为python面试题
2016/05/03 面试题
社区消防工作实施方案
2014/03/21 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
家属答谢词
2015/01/05 职场文书
河童之夏观后感
2015/06/11 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers