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使用urllib模块和pyquery实现阿里巴巴排名查询
Jan 16 Python
pyside写ui界面入门示例
Jan 22 Python
python中global用法实例分析
Apr 30 Python
python通过opencv实现批量剪切图片
Nov 13 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
python 的 scapy库,实现网卡收发包的例子
Jul 23 Python
python logging日志模块原理及操作解析
Oct 12 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
pytorch梯度剪裁方式
Feb 04 Python
Python批量处理csv并保存过程解析
May 16 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
Window下PHP三种运行方式图文详解
2013/06/11 PHP
PHP递归的三种常用方式
2019/02/28 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
python3.3实现乘法表示例
2014/02/07 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
git进行版本控制心得详谈
2017/12/10 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
python如何从键盘获取输入实例
2020/06/18 Python
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
Unix如何添加新的用户
2014/08/20 面试题
九年级语文教学反思
2014/02/04 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
汽车专业求职信
2014/06/05 职场文书
金融管理专业求职信
2014/07/10 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
利用Python实现模拟登录知乎
2022/05/25 Python