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 添加用户设置密码并发邮件给root用户
Jul 25 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
python 类详解及简单实例
Mar 24 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
python list删除元素时要注意的坑点分享
Apr 18 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
python批量获取html内body内容的实例
Jan 02 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
详解Python绘图Turtle库
Oct 12 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
Thinkphp多文件上传实现方法
2014/10/31 PHP
smarty内置函数section的用法
2015/01/22 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
js图片上传的封装代码
2017/08/01 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
谈谈JavaScript中的垃圾回收机制
2020/09/17 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
python简单实现刷新智联简历
2016/03/30 Python
TensorFlow实现创建分类器
2018/02/06 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
电厂职工自我鉴定
2014/02/20 职场文书
商场促销活动策划方案
2014/08/18 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
云冈石窟导游词
2015/02/04 职场文书
超市员工辞职信范文
2015/05/12 职场文书