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下载FTP上的文件夹的实现代码
Feb 10 Python
python判断windows隐藏文件的方法
Mar 21 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
flask入门之表单的实现
Jul 18 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
Python importlib动态导入模块实现代码
Apr 16 Python
什么是Python包的循环导入
Sep 08 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
php HtmlReplace输入过滤安全函数
2010/07/03 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
简单介绍Python中的floor()方法
2015/05/15 Python
详解python发送各类邮件的主要方法
2016/12/22 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
创建Django项目图文实例详解
2019/06/06 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
opencv python如何实现图像二值化
2020/02/03 Python
请介绍一下Ant
2016/07/22 面试题
倡议书范文格式
2014/05/12 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
项目备案申请报告
2015/05/15 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers