下载W3Cschool手机App,0基础随时随地学编程

导语

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

让我们愉快地开始吧~

相关文件

密码: qa49

数据集源于网络,侵歉删。

开发工具

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

That's all~

完整源代码请参见相关文件。

更多

没有具体介绍模型原理,因为后续可能会出一个系列,比较完整详细地介绍一下机器学习里的常用算法。所以,就先这样吧~

python垃圾邮件识别_【Python】垃圾邮件识别相关推荐

  1. python手写字母识别_机器学习--kNN算法识别手写字母

    本文主要是用kNN算法对字母图片进行特征提取,分类识别.内容如下: kNN算法及相关Python模块介绍 对字母图片进行特征提取 kNN算法实现 kNN算法分析 一.kNN算法介绍 K近邻(kNN,k ...

  2. python 菜品识别_一种菜品识别方法与流程

    本发明属于计算机图像识别技术,具体来说涉及一种基于卷积神经网络的用于识别菜品图像的技术方案. 背景技术: 由于图像的形成受到很多因素的影响,比如说拍摄角度.环境光线,原始图像的矩阵数据并不能被计算机分 ...

  3. python输出文本居中_#python PIL ImageDraw text 文本居中#

    python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...

  4. python多进程编程实例_[python] Python多进程编程技术实例分析

    这篇文章主要介绍了Python多进程编程技术,包括了线程.队列.同步等概念及相关的技巧总结,需要的朋友可以参考下 本文以实例形式分析了Python多进程编程技术,有助于进一步Python程序设计技巧. ...

  5. python查看excel编码格式_[Python]实现处理读写xlsx xls excel文件格式(含中文处理方法)...

    最近有个需求要处理excel 格式的数据,数据量比较大.用传统的语言似乎不太好处理,于是改用python实现,这里记录一下实现过程. 首先,科普一下xlsx xls的excel文件区别是什么. xls ...

  6. python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程

    用python怎样爬网页 # coding:utf8 import cookielib import urllib2 url = "http://blog.uouo123.com" ...

  7. python朋友圈刷屏_“Python太火了!请救救Java!”9万程序员刷屏朋友圈 !

    没想到有生之年,笔者能观察到"霸主陨落"的过程,继PLPY4月榜单官宣,Python躺赢,再度"夺"冠,实力甩下Java和C后,近期,Stack Overflo ...

  8. python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  9. 张孝祥java邮件开发_张孝祥java邮件开发详解笔记(生成文本邮件)

    package zxx.createMessage; import java.io.FileOutputStream; import java.util.Date; import java.util. ...

  10. python shell如何打开_“python shell怎么打开“python shell启动教程

    python shell怎么打开 1.简介:如何在python中运行shell(bash命令) 2.工具/原料:python库:os.py 3.方法:import os command = 'date ...

最新文章

  1. 设置VSCode终端命令行清除快捷键Ctrl+K或Ctrl+L
  2. 看完这些能控制大脑的寄生虫,你会怀疑人类!
  3. python实现一个抽象数据结构:栈
  4. python大数据结课报告_2020知到大数据分析的PYTHON基础结课答案
  5. 编写脚本隐藏托盘图标_【Electron-Playground系列】托盘篇
  6. linux下json数据解析,Linux下使用jq简单解析json的方法
  7. 装饰模式在Intermec CK1应用程序中通讯模块的应用
  8. 【Flink】Flink netty 通讯 PartitionRequestClient NettyPartitionRequestClient
  9. Firebug控制台详解(转)
  10. VMware 设置网络
  11. Python运算符含义汇总
  12. 解决Android App启动页背景图片拉伸变形问题
  13. ubuntu,装完PYTHON3 pip3 install 报错
  14. 小米线刷包需要解压么_小米10刷机教程,线刷升级更新官方系统包
  15. 推贴B2B/B2C订货商城系统 V3.0版
  16. 基于StockRanker的AI量化选股策略
  17. TCP offload to the resuce 让TCP减负来挽救我们
  18. Cadence PCB仿真使用Allegro PCB SI 创建含差分对网络元器件的IBIS模型图文教程
  19. 程序员健康指南---做出改变
  20. docker 创建etcd集群

热门文章

  1. (JAVA)FileWriter
  2. java面向对象(引用类型--参数传递)
  3. 开发者福音!面向Web场景的云开发服务正式开放!
  4. P3938 斐波那契
  5. window下搭建Python3.7+selenium3.1.1+pycharm环境
  6. 从使用到原理学习Java线程池
  7. 谈谈两种标准库类型---string和vector
  8. 微信 小程序 常见错误
  9. 从零开始学习Hadoop--第2章 第一个MapReduce程序
  10. 93. Restore IP Addresses 1