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使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
使用grappelli为django admin后台添加模板
Nov 18 Python
pandas object格式转float64格式的方法
Apr 10 Python
Python实现的读写json文件功能示例
Jun 05 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
pycharm配置git(图文教程)
Aug 16 Python
python绘制无向图度分布曲线示例
Nov 22 Python
python实现图片上添加图片
Nov 26 Python
Python如何发送与接收大型数组
Aug 07 Python
通过代码实例解析Pytest运行流程
Aug 20 Python
浅谈Python中的正则表达式
Jun 28 #Python
python中subplot大小的设置步骤
手把手教你实现PyTorch的MNIST数据集
PyMongo 查询数据的实现
Jun 28 #Python
浅谈哪个Python库才最适合做数据可视化
总结Python变量的相关知识
详解非极大值抑制算法之Python实现
You might like
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
在PHP中执行系统外部命令
2006/10/09 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
Python之列表的插入&替换修改方法
2018/06/28 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
电大学习个人自我评价范文
2013/10/04 职场文书
合同专员岗位职责
2013/12/18 职场文书
新年联欢会主持词
2014/03/27 职场文书
结婚保证书范文
2014/04/29 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
骨干教师考核评语
2014/12/31 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
angular异步验证器防抖实例详解
2022/03/31 Javascript
Python&Matlab实现樱花的绘制
2022/04/07 Python
Android自定义双向滑动控件
2022/04/19 Java/Android
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL