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 相关文章推荐
python3实现windows下同名进程监控
Jun 21 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
Feb 07 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
pytorch中的自定义数据处理详解
Jan 06 Python
Python基于Socket实现简单聊天室
Feb 17 Python
Python小白垃圾回收机制入门
Jun 09 Python
python正则表达式 匹配反斜杠的操作方法
Aug 07 Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 Python
python爬取youtube视频的示例代码
Mar 03 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
在线短消息收发的程序,不用数据库
2006/10/09 PHP
php查看当前Session的ID实例
2015/03/16 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
js 调用百度分享功能
2017/02/27 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
小程序实现录音功能
2020/09/22 Javascript
python命令行参数sys.argv使用示例
2014/01/28 Python
Django单元测试工具test client使用详解
2019/08/02 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
django使用graphql的实例
2020/09/02 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
火箭队口号
2014/06/18 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
一道JS算法面试题——冒泡、选择排序
2021/04/21 Javascript
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
Python实现socket库网络通信套接字
2021/06/04 Python
vue的项目如何打包上线
2022/04/13 Vue.js