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群发邮件实例代码
Jan 03 Python
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 Python
介绍Python中内置的itertools模块
Apr 29 Python
在Python中用keys()方法返回字典键的教程
May 21 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
Python中使用支持向量机SVM实践
Dec 27 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
django 读取图片到页面实例
Mar 27 Python
Python网页解析器使用实例详解
May 30 Python
pandas 数据类型转换的实现
Dec 29 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
sae使用smarty模板的方法
2013/12/17 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
JS删除数组指定值常用方法详解
2020/06/04 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
酒店门卫岗位职责
2013/12/29 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
个人整改方案范文
2014/10/25 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
mysql序号rownum行号实现方式
2022/12/24 MySQL