Weka进阶——基于KDD99数据集的入侵检测分析

来源:互联网 发布:ted软件下载 编辑:程序博客网 时间:2024/06/18 18:10

Weka是一个功能非常强大的数据挖掘工具,但是网络上的相关教程却极其稀少,尤其是没有一套系统的教程指导用户处理较大数据集(>50mb)。这篇文章是我这学期一门课程作业的总结,主要内容是利用Weka分析KDD99的数据集,训练分类器以解决问题。文章的所有过程都是在Explorer界面中进行的。

关于KDD99数据集的介绍,可以移步这儿,在此不多做介绍。对于初学者来说,处理大数据集的难点主要在于:

  • 大数据集处理速度过慢
  • 不知道如何把数据转化成符合分类器要求的形式

要解决这两个问题,需要对数据集进行预处理。针对第一个问题,我们需要按照一定的规则对数据集进行抽样,针对第二个问题,则需要改变数据的形式。事实上,在数据挖掘的过程中,数据的预处理一直都是非常重要的一个环节,只有把数据转化为分类器认可的形式才可以对其进行训练,而这个过程主要包括五部分,它们是数据标识、数据清洗、标准化抽样、数据归一化、数据离散化。

1 数据预处理

数据标识

解压数据包后,得到的是纯文本文件,其中的数据均用逗号隔开,且各个变量没有标识,weka无法识别,因此需要先对文件添加csv后缀名,将文本用Excel打开,为其添加标识。保存文件后,文件便可以利用Weka打开,但在此之前,我们必须对数据进行一些处理。

为了便于分类算法的进行,我们最终的预测属性最好不要多于10个,因此,有必要将数据集(包括测试集)中所有的攻击类别标识统一化,我选择了用0,1,2,3,4分别代表Normal,DoS,Probe,R2L,U2R五个大类,将所有分类标识均用这五个数字代替。该过程可以利用Excel完成。

数据清洗

在完成标识工作后,需要进行数据清洗的步骤,KDD99的数据集中,存在极个别的不符合规范的数据,需要检查然后将其剔除。

经过清洗后的数据可以利用Weka软件打开,为了便于软件进行处理,推荐将数据集另存为arff格式(处理速度更快)。此外,需要注意的是,训练集和测试集的arff属性段必须完全相同,例如,第三个属性段“目标主机服务类型”中,训练集和测试集的数据段并不同,而且自动生成的arff属性段中{属性}的排列顺序也不同,因此,需要对数据集进行手动修改,将属性段改为训练集属性段和测试集属性段的并集。(这一个阶段推荐使用notepad++直接对文件进行更改)

数据抽样

由于数据集过大,个人电脑的处理速度仍旧过慢,因此,需要对数据集进行标准化抽样,即按照特定属性对数据进行抽样缩减,选择过滤算法中选择unsupervised-instance-resample算法,将抽样百分比设为20%,即可得到6M左右的数据集。我所抽样的数据集信息如下表所示。注意,该抽样算法是按照预测属性的数量按比例抽取的,因此,抽样后的数据集中,五种攻击类型的数量比仍和原数据集类似。

类型

样本数量

Normal

12056

DoS

46024

Probe

839

R2L

3277

U2R

9

总数

62205

数据归一化

由于训练集和测试集中大部分属性的取值范围不同,无法取得相同的离散区间,因此,在进行离散化之前,需要将部分数据进行归一化。需要进行归一化的数据是取值连续且无固定上下界的数据,如duration,src_byte等,利用过滤算法中的unsupervised-instance-normalize算法,将区间定为20,可将数据归一化。

数据离散化

所有参与分类算法的属性均需要进行离散化,对于之前已经进行过归一化的属性,直接利用unsupervised-attribute-Discretize算法便可将它们离散化,而其他取值是类似于{0,1}或{0,1,2,3}这种类型,利用unsupervised-attribute-NumericToNominal算法可将属性离散化。这儿仍要注意,训练集和测试集的属性段信息必须完全相同!

最后得到的数据集效果如图所示:

0725weka

2 特征选择

对于经过离散化的数据,我们需要进行简要的分析,对其中的属性进行筛选。如果属性在经过离散化之后没有明显的区分度,那么可以判断它对于分类算法的帮助较小,在这一步过程中,num_outbound_cmd,is_host_login,urgent,su_attempted,num_shell,num_failed_login,num_filecreation这些属性呈现出过度集中于某一区间的趋势,因此将他们排除。最后一共留下35个属性进行分类。训练集与测试集都要进行上述步骤。

3 模型评估

做完预处理之后就可以进入classify界面进行分类器训练的工作了,训练完之后可以用测试集对分类器进行测试。下表显示了NBtree算法的检验数据,包括了TP值,FP值,Recall值和F-Means值,同时还列出了算法总体正确分类比和运行所需时间。

对于入侵检测来说,查全率(recall)和算法应用速度是最为关键的两项指标,因为将正常访问误判为攻击比将攻击误判为正常访问的代价要小得多,另外,系统需要对来访信息作出及时的判断,所以速度过慢的算法,如下表中的NBtree,即使正确率很高也无法胜任入侵检测模型。

DoS

Probe

R2L

U2R

Nbtree

TP

0.969

0.683

0.084

0.444

FP

0.009

0.003

0

0

Recall

0.969

0.683

0.084

0.444

F-Measure

0.983

0.716

0.154

0.571

正确分类比率

92.4

运行时间

164s

4 优化方案

在建立好分类器之后,数据挖掘的工作并没有完全结束,对于初级分类器,需要不断进行优化以提高它的分类准确度。常用的优化方案主要有三种,对属性的离散化进行优化、筛选特征属性、优化算法。

数据的离散化是数据预处理中较为重要的一步,如果离散化的数据过于集中,直接的后果就是不同类别的属性值没有得到很好的区分,但是离散化的优化需要对数据本身有着充分的了解,最好与专业人员合作进行。

数据挖掘的过程中,往往会得到大量的属性值,但这些属性之中有些并没有实际意义,不同属性值之间的权重也不相同,所以在对数据集有着充分了解的基础上,可以适当剔除多余属性,筛选出重要的属性进行分类,效果会更好。

大多数分类算法本身已经经过了无数的检验和优化,但是对于特定问题,我们可以在这些算法的基础上进行改编,制定特定的算法,在该实验中,我们就可以建立一个组合分类器,让它在不同的情况下运用不同的算法进行分类,得到更高的准确性。

0 0
原创粉丝点击