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通过字典dict判断指定键值是否存在的方法
Mar 21 Python
详解Python3.1版本带来的核心变化
Apr 07 Python
Python实现简单的代理服务器
Jul 25 Python
Python实现截屏的函数
Jul 26 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python语言描述随机梯度下降法
Jan 04 Python
python主线程捕获子线程的方法
Jun 17 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
python pymysql库的常用操作
Oct 16 Python
Python面向对象之内置函数相关知识总结
Jun 24 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
PHP中对数据库操作的封装
2006/10/09 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
PHP递归算法的详细示例分析
2013/02/19 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
[19:26]TNC vs EG (BO3)
2018/06/07 DOTA
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
Python中生成ndarray实例讲解
2021/02/22 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
旅游业大学生创业计划书
2014/01/31 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
维稳工作承诺书
2015/01/20 职场文书
罗马假日观后感
2015/06/08 职场文书
运动会宣传语
2015/07/13 职场文书
Python 视频画质增强
2022/04/28 Python