Python利用机器学习算法实现垃圾邮件的识别
开发工具
**python版本:**3.6.4
相关模块:
scikit-learn模块;
jieba模块;
numpy模块;
以及一些python自带的模块。
环境搭建
安装python并添加到环境变量,pip安装需要的相关模块即可。
逐步实现
(1)划分数据集
网上用于垃圾邮件识别的数据集大多是英文邮件,所以为了表示诚意,我花了点时间找了一份中文邮件的数据集。数据集划分如下:
训练数据集:
7063封正常邮件(data/normal文件夹下);
7775封垃圾邮件(data/spam文件夹下)。
测试数据集:
共392封邮件(data/test文件夹下)。
(2)创建词典
数据集里的邮件内容一般是这样的:
首先,我们利用正则表达式过滤掉非中文字符,然后再用jieba分词库对语句进行分词,并清除一些停用词,最后再利用上述结果创建词典,词典格式为:
{“词1”: 词1词频, “词2”: 词2词频…}
这些内容的具体实现均在**“utils.py”**文件中体现,在主程序中(train.py)调用即可:
最终结果保存在**“results.pkl”**文件内。
大功告成了么?当然没有!!!
现在的词典里有52113个词,显然太多了,有些词只出现了一两次,后续特征提取的时候一直空占着一个维度显然是不明智的做法。因此,我们只保留词频最高的4000个词作为最终创建的词典:
最终结果保存在**“wordsdict.pkl”**文件内。
(3)特征提取
词典准备好之后,我们就可以把每封信的内容转换为词向量了,显然其维度为4000,每一维代表一个高频词在该封信中出现的频率,最后,我们将这些词向量合并为一个大的特征向量矩阵,其大小为:
(7063+7775)×4000
即前7063行为正常邮件的特征向量,其余为垃圾邮件的特征向量。
上述内容的具体实现仍然在**“utils.py”**文件中体现,在主程序中调用如下:
最终结果保存在**“fvs_%d_%d.npy”**文件内,其中第一个格式符代表正常邮件的数量,第二个格式符代表垃圾邮件的数量。
(4)训练分类器
我们使用scikit-learn机器学习库来训练分类器,模型选择朴素贝叶斯分类器和svm(支持向量机):
(5)性能测试
利用测试数据集对模型进行测试:
结果如下:
可以发现两个模型的性能是差不多的(svm略胜于朴素贝叶斯),但svm更倾向于向垃圾邮件的判定。
到此这篇关于python实现垃圾邮件的识别的文章就介绍到这了,更多相关python识别垃圾邮件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
-
Python机器学习!识别图中最难的数字!验证码?验证码是小儿科!
-
荐 利用baidu的api和python的GUI实现通用文字识别功能
-
python机器学习朴素贝叶斯算法及模型的选择和调优详解
-
NLP学习(四)规则分词-正向、逆向和双向最大匹配算法的中文分词-python3实现
-
学习python基础班结束test:凯撒加密法,利用字母移位来加密字母。现在要求实现这样的一个加密和解密的类
-
机器学习_KMeans聚类算法的学习(Python实现)
-
经典实战案例:用机器学习 KNN 算法实现手写数字识别 | 原力计划
-
【机器学习】【KNN】线性扫描算法,python实现识别手写数字的系统
-
机器学习实战学习笔记(二)-KNN算法(2)-使用KNN算法进行手写数字的识别