欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

学点算法做安全之垃圾邮件识别(上)

来源:本站整理 作者:佚名 时间:2017-06-06 TAG: 我要投稿

垃圾邮件作为英特网中最具有争议的副产品,对于企业邮箱用户的影响首先就在于给日常办公和邮箱管理者带来额外负担。根据不完全统计,在高效的反垃圾环境下仍然有80%的用户每周需要耗费10分钟左右的时间处理垃圾邮件,而对于中国多数企业邮件应用仍处于低效率反垃圾环境的情况下,这个比例更是呈现数十倍的增长,如图1-1 所示,中国垃圾邮件的总量已经达到全球第三。对于企业邮件服务商而言,垃圾邮件的恶意投送,还会大量占用网络资源,使得邮件服务器85%的系统资源在用于处理垃圾邮件的识别,不仅资源浪费极其严重,甚至可能导致网络阻塞瘫痪,影响企业正常业务邮件的沟通。

世界垃圾邮件最多国家排行
本文主要以垃圾邮件识别为例,介绍常见的文本处理方法以及常见的文本处理相关的机器学习算法。上半部主要介绍垃圾邮件识别使用的数据集,介绍使用的特征提取方法,包括词袋模型和TF-IDF模型、词汇表模型。本文下半部主要介绍使用的模型以及对应的验证结果,包括朴素贝叶斯、支持向量基和深度学习。
数据集
垃圾邮件识别使用的数据集为Enron-Spam数据集,Enron-Spam数据集是目前在电子邮件相关研究中使用最多的公开数据集,其邮件数据是安然公司(Enron Corporation, 原是世界上最大的综合性天然气和电力公司之一,在北美地区是头号天然气和电力批发销售商)150位高级管理人员的往来邮件。这些邮件在安然公司接受美国联邦能源监管委员会调查时被其公布到网上。
机器学习领域使用Enron-Spam数据集来研究文档分类、词性标注、垃圾邮件识别等,由于Enron-Spam数据集都是真实环境下的真实邮件,非常具有实际意义。

Enron-Spam数据集主页
Enron-Spam数据集合如图所示使用不同文件夹区分正常邮件和垃圾邮件。

Enron-Spam数据集文件夹结构
正常邮件内容举例如下:
Subject: christmas baskets
the christmas baskets have been ordered .
we have ordered several baskets .
individual earth – sat freeze – notis
smith barney group baskets
rodney keys matt rodgers charlie
notis jon davis move
team
phillip randle chris hyde
harvey
freese
faclities
垃圾邮件内容举例如下:
Subject: fw : this is the solution i mentioned lsc
oo
thank you ,
your email address was obtained from a purchased list ,
reference # 2020 mid = 3300 . if you wish to unsubscribe
from this list , please click here and enter
your name into the remove box . if you have previously unsubscribed
and are still receiving this message , you may email our abuse
control center , or call 1 – 888 – 763 – 2497 , or write us at : nospam ,
6484 coral way , miami , fl , 33155 ” . 2002
web credit inc . all rights reserved .
Enron-Spam数据集对应的网址为:http://www2.aueb.gr/users/ion/data/enron-spam/
特征提取
方法一:词袋模型
文本特征提取有两个非常重要的模型:
词集模型:单词构成的集合,集合中每个元素都只有一个,也即词集中的每个单词都只有一个
词袋模型:如果一个单词在文档中出现不止一次,并统计其出现的次数(频数)
两者本质上的区别,词袋是在词集的基础上增加了频率的纬度,词集只关注有和没有,词袋还要关注有几个。
假设我们要对一篇文章进行特征化,最常见的方式就是词袋。
导入相关的函数库
>>> from sklearn.feature_extraction.text import CountVectorizer
实例化分词对象
>>> vectorizer = CountVectorizer(min_df=1)
>>> vectorizer
CountVectorizer(analyzer=…’word’, binary=False, decode_error=…’strict’,
dtype=, encoding=…’utf-8′, input=…’content’,
lowercase=True, max_df=1.0, max_features=None, min_df=1,
ngram_range=(1, 1), preprocessor=None, stop_words=None,
strip_accents=None, token_pattern=…’(?u)\\b\\w\\w+\\b’,
tokenizer=None, vocabulary=None)
将文本进行词袋处理
>>> corpus = [
... 'This is the first document.',
... 'This is the second second document.',
... 'And the third one.',
... 'Is this the first document?',
... ]
>>> X = vectorizer.fit_transform(corpus)
>>> X

with 19 stored elements in Compressed Sparse … format>
获取对应的特征名称
>>> vectorizer.get_feature_names() == (
… ['and', 'document', 'first', 'is', 'one',
... 'second', 'the', 'third', 'this'])
True
获取词袋数据,至此我们已经完成了词袋化。但是对于程序中的其他文本,如何可以使用现有的词袋的特征进行向量化呢?
>>> X.toarray()
array([[0, 1, 1, 1, 0, 0, 1, 0, 1],
[0, 1, 0, 1, 0, 2, 1, 0, 1],
[1, 0, 0, 0, 1, 0, 1, 1, 0],
[0, 1, 1, 1, 0, 0, 1, 0, 1]]…)
我们定义词袋的特征空间叫做词汇表vocabulary。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载