电子邮件是较常用的网络应用之一,已经成为网络交流沟通的重要途径。但是,垃圾邮件(spam)烦恼着大多数人,调查显示,93%的被调查者都对他们接收到的大量垃圾邮件非常不满。一些简单的垃圾邮件事件也造成了很有影响的安全问题。
垃圾邮件给互联网以及广大的使用者带来了很大的影响,这种影响不仅仅是人们需要花费时间来处理垃圾邮件、占用系统资源等,同时也带来了很多的安全问题。
垃圾邮件占用了大量网络资源,这是显而易见的。一些邮件服务器因为安全性差,被作为垃圾邮件转发站为被警告、封IP等事件时有发生,大量消耗的网络资源使得正常的业务运作变得缓慢。随着国际上反垃圾邮件的发展,组织间黑名单共享,使得无辜服务器被更大范围屏蔽,这无疑会给正常用户的使用造成严重问题。
所以本次实验我们基于这一背景尝试通过DNN来实现垃圾邮件的识别。

关于DNN的介绍,我们从其组成部分、常见DNN模型、DNN处理的硬件着手进行学习。先来学习DNN的组成部分。
卷积神经网络:如下图所示,由多个卷积层组成(CONV),每个卷积层对各自的输入进行高阶抽象,这种高阶抽象被称为特征图(feature map,fmap)。CNN可以通过非常深的层级实现极高的性能。卷积神经网络被广泛应用在图像理解,语音识别,游戏,以及机器人学等。图5(b)介绍了CNN卷积的过程,CNN中的每个卷积层主要由高维卷积构成。输入为一系列二维特征图(input feature map),特征图的个数被称为通道,这里有C个通道。卷积层输出的每个点都是所有通道卷积之和。卷积层输出的通道数取决于滤波器的个数,本例中有M个滤波器,因此输出特征图为M通道。

非线性函数:在每个卷积或全连接计算之后,都会使用一个非线性激活函数。如下图所示,不同种类的非线性函数向DNN中引入非线性。起初DNN经常使用Sigmoid或tanh函数,目前ReLU和它的一些变种函数被证明可以更简单,更易训练,同时也能达到更高的准确性,因此变得越来越流行

池化(Pooling):池化可以使网络鲁棒性更强。通常池化都是不重叠的,这样能降低表示的维数,减小参数量。

标准化(Normalization):控制各层输入的分布可以极大的加速训练过程并提高准确度。常有的如批标准化(batch normalization)(如下公式),它更进一步的进行缩放和平移,其中γ和β为参数,需要在训练中学习

常见的DNN模型有:
常见DNN模型

LeNet:1989年第一个CNN方法,为了解决手写数字识别而设计的。
AlexNet:它在2012年赢得了ImageNet挑战,是第一个使用CNN方法赢得ImageNet的网络。它拥有5个卷积层和3个全连接层。
Overfeat:它与AlexNet结构很相似,同样拥有5个卷积层和3个全连接层,区别是Overfeat的滤波器数量更多,所以准确度略有提升。
VGG-16:网络深度大大加深,达到16层,其中包含13个卷积层和3个全连接层。为了平衡网络层数加深而导致的成本增加,一个大的滤波器被分解为多个小的滤波器,来减小参数数量,并具有相同的感知野。VGG有两个模型,还有一个VGG-19的模型,比VGG-16的Top-5错误率低0.1%。如下图所示,为了减少参数,为了使感知野大小不变,使用两个较小的滤波器代替大的滤波器

GoogLeNet:网络深度达到22层,同时引入了Inception模型,如下图所示。之前的模型通常是级联的,而Inception模型是并行连接的。可以看到,它使用了多种大小的滤波器对输入进行处理,这是为了能够在不同尺度上处理输入。22层网络包括了三个卷积层,接下来使9个inceptioin层(每层相当于两个卷积层),以及一个全连接层。

ResNet:也叫做残差网络(Residual Net)。使用了残差连接使得网络变得更深(34层,或更多甚至千层)。它是ImageNet挑战中第一个top-5错误率低于人类的。当网络层次变得更深时,训练时的一个难点就是梯度消失(Vanishing Gradient)。由于沿着网络进行反向传播时,梯度会越来越小,导致对于很深的网络,最初几层网络的权重基本不会更新。残差网络引入了“短接”模型,包含了全等连接,使得梯度传播可以跳过卷积层,即使网络层数达到一千层仍可以训练。残差模型如下所示

再来看看DNN处理的硬件。
由于DNN的流行,许多硬件平台都针对DNN处理的特性进行针对性的开发。无论是服务器级别的还是嵌入式的SoC硬件都在快速发展。因此,了解各种平台如何加速计算,是十分重要的。
CONV和FC层的基本组成都是乘加操作(Multiply-and-Accumulate,MAC),可以很容易的并行化。为了实现高性能,如图12所示,包括时间和空间的架构的经典模型经常被使用。时间架构(也称作SIMD或SIMT)主要出现在CPU或GPU中。它对大量ALU使用集中控制。这些ALU智能从存储器层次结构中获取数据,并且彼此不能通信数据。相比之下,空间架构使用数据流处理,即ALU形成处理链,使得它们能直接将数据从一个传递到另一个。每个ALU有自己的控制逻辑和本地内存,称为暂存器或注册文件。空间架构主要使用在为DNN专门设计的ASIC中。

对于时间架构,可以使用核心中的计算转换(Computational Transform)来减少乘法的数量,以增加吞吐量(Throughput)。
对于加速硬件中使用的空间架构,使用存储器层次结构中的低成本内存,来增加数据重利用率,以降低能耗。

接下来了解本次实验用到的数据集。
本次实验用到的数据集来自spambase.Spambase Dataset 是一个垃圾邮件数据集,其包含 57 个属性和 4601 个实例,其中1813个实例为垃圾邮件。该数据集主要用于垃圾邮件的识别分类,其中垃圾邮件的资源均来自于邮件管理员和提交垃圾邮件的个人,其可被用于构建垃圾邮件过滤器。
训练数据在spambase.data,文件很大,有700多k,我们在终端中使用head命令打印前几条看看

可以看到spambase的数据不是原始的邮件内容,而是已经经过特征化的数据,对应的特征是统计的关键字以及特殊符号的词频。最后一个是垃圾邮件的标记位,1表示为垃圾邮件,0表示不是垃圾邮件
具体的格式说明可以打开syambase.name进行查看

可以看到会统计单词频率、字符频率等特征

可见这是一个入门级的垃圾邮件分类训练集。

那么接下来我们就来看看代码实现。
首先是加载数据集的函数

在加载完成后,我们通过train_test_split将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签,这里指定测试集占0.4
加载完成后,指定分类器为DNN

上面的代码中,hidden_units=[30,15]表示具有两个隐藏层,每层节点数分别为30,15.n_classes=2表示2分类,对应我们的实验,即分类为垃圾邮件与非垃圾邮件。
接着进行训练

Steps=1000表示训练1000批次,batch_size=50表示每个批次有50个训练数据
使用训练数据集进行分类,得到分类结果y_predict,将其与正确标记的y_test进行比对,计算出准确率

测试
Python3 dnn.py

这里会打印出TensorFlow的很多warning信息,不需要去关注。上图红色标注的就是准确率,可以看到高达88.7%

参考:
1.《机器学习之web安全》
2.http://archive.ics.uci.edu/ml/datasets/Spambase/
3.https://baike.baidu.com/item/%E5%8F%8D%E5%9E%83%E5%9C%BE%E9%82%AE%E4%BB%B6
4.https://www.leiphone.com/news/201703/qSPav6WbksGmW3Vh.html
5.https://github.com/duoergun0729/1book/

深度神经网络识别垃圾邮件相关推荐

  1. 《Web安全之机器学习入门》笔记:第十五章 15.7与15.8 TensorFlow识别垃圾邮件

    本小节通过识别垃圾邮件,讲解tensorflow通过神经网络DNN在网络安全方向的应用,同时还对比了NB算法的垃圾邮件识别效果. 1.数据集与特征化 本小节使用SpamBase这个入门级垃圾邮件数据集 ...

  2. 如何用Python和深度神经网络识别图像?

    本文授权转自微信公众号芝兰玉树 作者 | 王树义 只需要10几行Python代码,你就能自己构建机器视觉模型,对图片做出准确辨识和分类.快来试试吧! 视觉 进化的作用,让人类对图像的处理非常高效. 这 ...

  3. python发邮件不进入垃圾箱_Python识别垃圾邮件|python3教程|python入门|python教程

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

  4. Python识别垃圾邮件

    导语 利用简单的机器学习算法实现垃圾邮件识别. 让我们愉快地开始吧~ 相关文件 百度网盘下载链接: https://pan.baidu.com/s/1Hsno4oREMROxWwcC_jYAOA 密码 ...

  5. python深度神经网络文本二分类代码_如何用Python和深度神经网络识别图像?

    只需要10几行Python代码,你就能自己构建机器视觉模型,对图片做出准确辨识和分类.快来试试吧! 视觉 进化的作用,让人类对图像的处理非常高效. 这里,我给你展示一张照片. 如果我这样问你: 你能否 ...

  6. 利用朴素贝叶斯算法识别垃圾邮件

    转载自:http://blog.csdn.net/wowcplusplus/article/details/25190809 朴素贝叶斯算法是被工业界广泛应用的机器学习算法,它有较强的数学理论基础,在 ...

  7. 毕业设计-基于深度学习的垃圾邮件过滤系统的设计与实现

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言

  8. 毕业设计 - 题目:垃圾邮件(短信)分类 算法实现 机器学习 深度学习 开题

    文章目录 1 前言 2 垃圾短信/邮件 分类算法 原理 2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍 4 数据预处理 5 特征提取 6 训练分类器 7 综合测试结果 8 其他模型方法 9 最 ...

  9. python垃圾邮件识别_Python贝叶斯推理垃圾邮件分类

    针对贝叶斯垃圾邮件分类,阮一峰大神在多年前曾经写过一篇博客文章,他写的有些观点看起来很简单明了,不过我有点不是很理解其推导过程,虽然最后的结果等价,但是我还是觉得他的那套简单推导,感觉不太容易理解,可 ...

  10. 论题:基于机器学习的垃圾邮件过滤系统

    目录 摘要 1.引言 2.相关工作 3.数据集与特征提取 4.机器学习模型的设计与选择 5.模型优化与融合策略 6.系统实现与应用 7.结论 本文为论题:基于机器学习的垃圾邮件过滤系统的撰写思路. 摘 ...

最新文章

  1. projecteuler_problem10
  2. 从云端到边缘 AI推动FPGA应用拓展
  3. android监听器在哪里创建,[转载]android开发中创建按钮事件监听器的几种方法
  4. JS中使用工厂模式创建对象
  5. 投标报价得分计算程序_什么是投标报价?怎么计算呢?
  6. 线性回归 —— python
  7. saiku连mysql 使用_saiku应用的调试
  8. WEB前端开发工程师 学习第二天 边框
  9. Ubuntu下使用Dr.com宽带客户端上网的步骤
  10. projecteuler_problem12
  11. C++ Lib的生成与调用 生成dll,lib快速的寻找方法
  12. 下载mysql的驱动包
  13. linux内核 image,linux内核zImage详解
  14. 春节没事,看几部黑客电影吧!
  15. Java抓包分析一(基于jnetpcap进行抓包)——抓包环境搭建,获取网卡
  16. 5款优秀的免费加密软件
  17. java中List 的Stream常用的几种用法
  18. 终于知道程序员为什么总是带个耳机了!
  19. 基于android2.3.5系统:源码下载及android体系架构
  20. vscode安装哪个版本更好

热门文章

  1. 这群人,用8年讲述体育能有多迷人
  2. java 什么时候用 protected_protected如何在java里使用?
  3. org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not runn Hbase shell 无法执行命令
  4. 每天老听别人念叨“算法+数据结构=程序”,知道是谁说的么?一起走进Pascal语言之父——图灵奖得主尼古拉斯·沃斯
  5. 计算机专业专业课代号408,2020武汉大学计算机专业课改考408
  6. 小酥的Python学习日记 2022.7.3
  7. 输入经纬度在地图中标注位置(百度地图)
  8. 使 abbr 元素适用于触摸屏、键盘和鼠标
  9. ftp服务器空文件夹不让删,FTP不能删除(修改)文件夹的问题?(转载)
  10. fantastic website