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 相关文章推荐
centos系统升级python 2.7.3
Jul 03 Python
Python函数的周期性执行实现方法
Aug 13 Python
Python编程修改MP3文件名称的方法
Apr 19 Python
几种实用的pythonic语法实例代码
Feb 24 Python
Python 修改列表中的元素方法
Jun 26 Python
解决Python plt.savefig 保存图片时一片空白的问题
Jan 10 Python
Python自动抢红包教程详解
Jun 11 Python
python 操作hive pyhs2方式
Dec 21 Python
Python读取csv文件实例解析
Dec 30 Python
Python3 assert断言实现原理解析
Mar 02 Python
Python接口自动化测试框架运行原理及流程
Nov 30 Python
AI:如何训练机器学习的模型
Apr 16 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
不安全的常用的js写法
2009/09/15 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
JavaScript中Function详解
2015/02/27 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
用Python实现协同过滤的教程
2015/04/08 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
Pycharm更换python解释器的方法
2018/10/29 Python
python字典改变value值方法总结
2019/06/21 Python
Python with标签使用方法解析
2020/01/17 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
咖啡蛋糕店创业计划书
2014/01/28 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
学雷锋月活动总结
2014/04/25 职场文书
法定代表人身份证明书
2014/09/10 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
2015年售票员工作总结
2015/04/29 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技