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计数排序和基数排序算法实例
Apr 25 Python
Python中的字典遍历备忘
Jan 17 Python
Python的Django框架中从url中捕捉文本的方法
Jul 20 Python
Python3 replace()函数使用方法
Mar 19 Python
对Python中plt的画图函数详解
Nov 07 Python
深入理解Python异常处理的哲学
Feb 01 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
详解Python 解压缩文件
Apr 09 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
python黑魔法之参数传递
2016/02/12 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
python利用有道翻译实现"语言翻译器"的功能实例
2017/11/14 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
python交易记录整合交易类详解
2019/07/03 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
Python定义一个Actor任务
2020/07/29 Python
Python的信号库Blinker用法详解
2020/12/31 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
机械制造专业个人的自我评价
2013/12/28 职场文书
求职信写作要突出重点
2014/01/01 职场文书
法学专业毕业实习自我鉴定2014
2014/09/27 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
工厂见习报告范文
2014/10/31 职场文书
党员公开承诺书2015
2015/01/21 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏