Python利用机器学习算法实现垃圾邮件的识别

作者:weixin_43649691 时间:2021-02-24 04:31:04 

开发工具

**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更倾向于向垃圾邮件的判定。

来源:https://blog.csdn.net/weixin_43649691/article/details/118254601

标签:Python,识别,垃圾邮件
0
投稿

猜你喜欢

  • Django 中使用流响应处理视频的方法

    2021-01-12 20:55:13
  • Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例

    2021-04-16 10:50:05
  • 使用Python中的cookielib模拟登录网站

    2022-01-20 08:54:26
  • 解决Go语言time包数字与时间相乘的问题

    2023-08-06 17:07:55
  • Oracle Index 的三个问题

    2010-07-26 12:53:00
  • 深入分析Python中Lambda函数的用法

    2023-07-01 16:03:21
  • 浅谈python print(xx, flush = True) 全网最清晰的解释

    2022-01-28 21:45:48
  • matplotlib共享坐标轴的实现(X或Y坐标轴)

    2023-12-01 23:58:12
  • MySQL数据库配置技巧

    2009-03-06 14:32:00
  • Python脚本实现格式化css文件

    2023-01-09 19:00:37
  • 设计英文网站要注意的问题

    2011-04-28 11:22:00
  • 使用pyqt 实现重复打开多个相同界面

    2021-08-19 12:33:43
  • CSS分栏布局的方法:绝对定位和浮动

    2009-04-30 13:10:00
  • python解释模型库Shap实现机器学习模型输出可视化

    2022-04-27 08:00:10
  • Python3 ID3决策树判断申请贷款是否成功的实现代码

    2021-02-11 15:01:58
  • 动态SQL中返回数值的实现代码

    2012-01-05 18:53:54
  • php实现比较全的数据库操作类

    2023-11-22 02:15:10
  • python标准日志模块logging的使用方法

    2022-10-29 19:08:16
  • tkinter如何实现label超链接调用浏览器打开网址

    2023-04-05 15:08:20
  • python实现AES加密与解密

    2022-12-08 08:18:40
  • asp之家 网络编程 m.aspxhome.com