项目地址

项目发布于四年前,大概是2020年左右的代码,以.ipynb的形式呈现实验过程和结果

github地址: IDS-UNSW-NB15

说明

实验使用的不是标准处理后的UNSW_NB15_testing-set.csvUNSW_NB15_training-set.csv,而是使用下面四个csv文件,也是UNSW-NB15数据集官方提供的,只是比起处理好的训练集和测试集多了很多数据,而且大部分是良性数据,也就是说Normal数据占大部分,使用这几个数据集比处理好的训练集和测试集分类结果要好(因为良性数据占87%左右,怎么分类都能有不错的结果),但是使用下面的数据集会比原来提供的测试集和训练集更加不平衡

  • UNSW-NB15_1.csv
  • UNSW-NB15_2.csv
  • UNSW-NB15_3.csv
  • UNSW-NB15_4.csv

什么是EDA?

主要是看下数据集大概长什么样,以及简单处理一下

EDA(探索性数据分析,Exploratory Data Analysis)是一种数据分析方法,主要用于在建模和分析之前,帮助分析师和数据科学家了解数据的结构、特征和模式,从而提高模型的有效性和准确性。

主要包括但不限于如下几个方面:

  • 数据总结:计算描述性统计量,如均值、中位数、标准差、分位数等
  • 数据可视化:通过图表和可视化技术(如直方图、散点图、箱线图等)来直观展示数据特征和分布。
  • 缺失值分析:检查数据集中是否存在缺失值,评估其对分析结果的影响,并决定如何处理这些缺失值
  • 相关性分析:评估不同变量之间的关系,观察变量之间的关系强度和方向
  • 异常值检测:识别数据中的异常值,这些值可能会影响模型的训练和预测性能。
  • 数据分布检查:判断是否符合某种统计分布(如正态分布),这对于选择合适的模型和算法非常重要。

项目EDA

实验主要工作

1.Dataset主要工作如下

  • 进行简单的数据清洗和预处理
    • 填充空值,We don’t have “normal” values for “attack_cat”, so we must fill Null values with “normal”,attack_cat列的normal值是NaN,把它填充为normal
    • 修正二进制列出现的异常值,把出现的2和4全部替换为1,Even though it’s a binary column, but there’re values like 2 and 4
    • 把所有“-”值替换为None
    • 保存简单处理后的数据为新的csv,训练集为train_alldata_EDA.csv,测试集为train_alldata_EDA.csv
  • 数据集类型分布如下
1
2
In Train: there are 0.8733599845222133  of class 0 and 0.12664001547778667  of class 1
In Test: there are 0.8738699369434985 of class 0 and 0.1261300630565015 of class 1

2.EDA主要工作如下

  • 生成属性热力图查看各属性的相关性
  • 生成各种图片查看各属性的关联

3.Preprocessing主要工作如下

  • 预处理

  • 特征工程,在这一步把'srcip', 'sport', 'dstip', 'dsport', 'attack_cat'这几列都删除了,所以后面得到95%以上的评估指标跟attack_cat这列没关系!!!

  • 标准化、one-hot编码,最后剩下197 columns

后面的不写了,太麻烦

实验结果

这个实验提供了多种Machine Learning的方法进行测试,

  • Logistic Regression
  • Linear SVC
  • Decision Tree
  • Random Forest
  • GBDT( Gradient boosted decision tree)

但从实验结果看,每种试验方法的效果都很不错,有95%~98%的效果

但是我的论文打算使用的是深度学习方法,使用DNN或者CNN,先采用这个项目的实验方法来预处理数据,再把原来的机器学习方法换成深度学习方法看看效果如何。因为数据集太不平衡了,良性数据占了绝大部分,所以即使是效果不好,出来的结果也应该有90%以上,比预处理好的数据集好太多了,那个作死了也就91%左右,做差了才70%。

实验结果

其他

在知乎上还有一个关于UNSW-NB15数据集的实验, 知乎帖子 也是使用了ML或者DL的方法来处理数据集的,看起来结果也不错,但是!,他是直接从训练集里面划分出测试集的,没有使用别人弄好的测试集,所以看起来效果很好,其实已经过拟合了。

还有其他一些看起来很夸张的实验结果,什么accuracy、recall、F1-score全都是1.00或者0.9999..的,那些我怀疑他们都没有去掉attack_cat那一列,只要保留那一列,无论用什么方法都是100%的,因为这一列已经是标签列了

知乎-实验结果

如果使用DNN或者CNN之后效果还能有95%左右的话,就可以使劲套方法增加模型复杂度了,原来的GSMOTE+AE+DNN(CNN)在CIC-IDS2017数据集反而会降低分类效果,直接使用DNN或者CNN效果都比套个AE要好,想用GSMOTE也用不上,一是one-hot编码后如果使用gsmote会使每一行新增的列都有小数产生,而不是固定只能为0或1值,还有就是数据集存在字符型数据处理起来很麻烦,另一个CIC-IDS2017数据集使用了gsmote,但是生成的数据也存在一些问题,全靠原来的数据集质量好才撑起99%的评估指标。

麻烦啊!