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中的一些类型转换函数小结
Feb 10 Python
Python中使用items()方法返回字典元素对的教程
May 21 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
Python3随机漫步生成数据并绘制
Aug 27 Python
Django发送邮件功能实例详解
Sep 02 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
Django Model中字段(field)的各种选项说明
May 19 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
Jul 01 Python
Python文件操作及内置函数flush原理解析
Oct 13 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
动态改变textbox的宽高的js
2006/10/26 Javascript
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
Google韩国首页图标动画效果
2007/08/26 Javascript
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
node.js入门教程
2014/06/01 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
Vue分页器实现原理详解
2019/06/28 Javascript
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
荷兰电脑专场:Paradigit
2018/05/05 全球购物
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
CAD制图人员的自荐信
2014/02/07 职场文书
出生公证委托书
2014/04/03 职场文书
小学生评语大全
2014/04/18 职场文书
四风问题对照检查材料
2014/09/22 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书