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接收多播数据的代码
Mar 01 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
python实现文本去重且不打乱原本顺序
Jan 26 Python
python字典的常用操作方法小结
May 16 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
利用python numpy+matplotlib绘制股票k线图的方法
Jun 26 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
使用sklearn对多分类的每个类别进行指标评价操作
Jun 11 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
python批量更改目录名/文件名的方法
Apr 18 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
PDO::_construct讲解
2019/01/27 PHP
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
JavaScript中的数组操作介绍
2014/12/30 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
对pandas处理json数据的方法详解
2019/02/08 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
游戏商店:Eneba
2020/04/25 全球购物
Java基础知识面试题
2014/03/25 面试题
资深财务管理人员自我评价
2013/09/22 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
村官学习十八大感想
2014/01/15 职场文书
学雷锋月活动总结
2014/04/25 职场文书
前台岗位职责
2015/02/13 职场文书
活动总结书怎么写
2015/05/11 职场文书
心术观后感
2015/06/11 职场文书
开学典礼观后感
2015/06/15 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
MySQL里面的子查询的基本使用
2021/08/02 MySQL