前言

使用AE+DNN对CIC-IDS2017数据集进行二分类异常检测,没有使用GSmote来平衡数据集,还是能达到98%~99%的效果,我估计加上GSmote之后效果会变差,因为现在预处理和归一化之后数据全都在[0,1]之间,但是加上GSmote会由于距离原因产生负值,可能会对结果产生一定影响,而且大概率是不好的影响

相关文章

Improving the Classification Effectiveness of Intrusion Detection by Using Improved Conditional Variational AutoEncoder and Deep Neural Network

2019年发表

这个是在UNSW-NB15数据集上做多分类的,用的是ICVAE-DNN模型(改进的条件变分自编码器(ICVAE)与深度神经网络(DNN)),实验结果如下

85%左右的ACC,90%的F1-Score,效果不算特别凸出,如果不去掉attack_cat 列,把这列保存下来做LabelEncoder的话,应该能达到98%~100%的效果,这篇文章效果不算突出,而且时间有一点久了

这篇文章提到了数据不平衡问题,它的方法是使用ICVAE解决数据不平衡问题,原文如下:

训练好的ICVAE解码器根据指定的入侵类别生成新的攻击样本,以平衡训练数据,增加训练样本的多样性,从而提高对不平衡攻击的检测率。

训练好的ICVAE编码器不仅用于自动降低数据维度,还用于初始化DNN隐层权重,使得DNN能够通过反向传播和微调轻松实现全局优化。

ICVAE-DNN在数据增强方面优于三种著名的过采样方法(SMOTE、ADASYN、ROS)

  • smote(Synthetic Minority Over-sampling Technique)
    • SMOTE通过在少数类样本的特征空间中进行插值来合成新的样本
  • ADASYN (Adaptive Synthetic Sampling)
    • ADASYN是对SMOTE的一种改进,它根据数据分布自适应地生成合成样本
  • ROS (Random Over-Sampling)
    • ROS是最简单的一种过采样方法,它通过随机复制少数类样本来增加样本数量。

ICVAE-DNN

A hybrid Intrusion Detection System based on Sparse autoencoder and Deep
Neural Network

2021年发表

期刊不错 Computer Communications

这个也是在UNSW-NB15数据集上做多分类的,用的是SAE-DNN模型,实验结果如下,每一项都是99.9%,很夸张,估计是保留了attack_cat列的效果,而且使用其他例如CNN、LSTM加上SAE的效果也是99%,玄乎

SAE-DNN(二分类)

SAE-DNN(多分类)

SAE+其他模型(多分类)

A fast network intrusion detection system
using adaptive synthetic oversampling and
LightGBM

2021年文章 可以借鉴它的写法

这篇文章使用的模型是LightGBM+ADASYN,在UNSW-NB15CIC-IDS2017数据集上都进行了实验,不过做的是二分类,文章提了很多关于少数类不平衡的问题,但是最终没有做多分类来验证所提出的方案在多分类上的实验结果

因为用到了少数类平衡算法,所以在写文章时可以以图片的形式展示平衡前和平衡后的样本分布情况,凸显一下工作量。

UNSW-NB15实验结果

CIC-IDS2017实验结果

实验结果

参数 结果 混淆矩阵
DNN:
阈值0.5
batch_size=128
epochs=20
结构4层数,128-64-32-1
优化器Adam
AE:
输出维度40
编码器层数5,256-128-64-32
训练自编码器batch_size=64
loss = mse,Adam优化器
准确率: 0.9943
精确率: 0.9824
召回率: 0.9933
F1分数: 0.9878
误报率: 0.0054
同上 准确率: 0.9930
精确率: 0.9797
召回率: 0.9905
F1分数: 0.9851
误报率: 0.0063
[[360703 2279]
[ 1049 109819]]
AE输出维度为15,其余不变 准确率: 0.9949
精确率: 0.9893
召回率: 0.9890
F1分数: 0.9892
误报率: 0.0033
[[361800 1182]
[ 1219 109649]]
AE输出维度为10,其余不变 准确率: 0.9943
精确率: 0.9830
召回率: 0.9926
F1分数: 0.9878
误报率: 0.0052
[[361082 1900]
[ 819 110049]]
AE输出维度改为20维,DNN添加
一层隐藏层神经单元数为16
准确率: 0.9936
精确率: 0.9808
召回率: 0.9922
F1分数: 0.9865
误报率: 0.0059
[[360827 2155]
[ 860 110008]]
AE训练20轮,batch_size=128
维度输出为15,DNN训练30轮
准确率: 0.9953
精确率: 0.9879
召回率: 0.9921
F1分数: 0.9900
误报率: 0.0037
[[361640 1342]
[ 876 109992]]
同上,重复实验,上一轮效果太好了 性能指标:
准确率: 0.9933
精确率: 0.9913
召回率: 0.9798
F1分数: 0.9855
误报率: 0.0026
混淆矩阵:
[[362026 956]
[ 2234 108634]]
同上,重复试验 性能指标:
准确率: 0.9943
精确率: 0.9842
召回率: 0.9913
F1分数: 0.9878
误报率: 0.0049
[[361219 1763]
[ 960 109908]]
AE输出维度变为40,batch_size=32 准确率: 0.9927
精确率: 0.9778
召回率: 0.9915
F1分数: 0.9846
误报率: 0.0069
[[360490 2492]
[ 947 109921]]
AE输出维度变为15,batch_size=256
阈值0.5
准确率: 0.9941
精确率: 0.9873
召回率: 0.9876
F1分数: 0.9875
误报率: 0.0039
[[361570 1412]
[ 1371 109497]]
同上 准确率: 0.9951
精确率: 0.9832
召回率: 0.9961
F1分数: 0.9896
误报率: 0.0052
[[361097 1885]
[ 435 110433]]
同上 准确率: 0.9951
精确率: 0.9832
召回率: 0.9961
F1分数: 0.9896
误报率: 0.0052
[[361398 1584]
[ 1255 109613]]
同上 准确率: 0.9940
精确率: 0.9858
召回率: 0.9887
F1分数: 0.9872
误报率: 0.0044
[[361398 1584]
[ 1255 109613]]
同上 准确率: 0.9959
精确率: 0.9894
召回率: 0.9931
F1分数: 0.9912
误报率: 0.0033
[[361797 1185]
[ 763 110105]]
阈值为0.6 准确率: 0.9960
精确率: 0.9927
召回率: 0.9902
F1分数: 0.9915
误报率: 0.0022
[[362179 803]
[ 1089 109779]]
阈值为0.7 准确率: 0.9954
精确率: 0.9949
召回率: 0.9854
F1分数: 0.9901
误报率: 0.0015
[[362423 559]
[ 1623 109245]]
阈值为0.7
AE训练20轮,batch_size=256
DNN训练30轮,batch_size=128
AE输出维度为15
准确率: 0.9950
精确率: 0.9958
召回率: 0.9827
F1分数: 0.9892
误报率: 0.0013
[[362519 463]
[ 1917 108951]]

总结

光使用AE+DNN能取得不错的效果,这次的AE+DNN比之前的效果要好,之前使用AE+DNN只能取得97%~98%的效果,从来没到过99%,但是这次可以,不知道是什么问题,可能是AE结构设置的问题,也可能是之前加了GSmote的问题,明天再加上GSmote试试,如果CIC-IDS2017数据集搞定了就开始处理UNSW-NB15数据集,那个加上attack_cat列应该效果很好

模型训练时间、模型保存

batch_size设置得越小,所消耗的训练时间就越长,尤其是AE的训练,当把batch_size调为64时,AE训练一轮要130S左右,二十轮训练就是四十分钟,加上DNN的训练估计要五十分钟,要花很多时间;但是给的batch_size足够大,例如256,一轮的训练时长就变为13S,大大节约了训练时间,最重要的是调整batch_size大小好像对实验结果影响不大后续可以把训练好的AE模型保存为.hdf5下次用的时候不用从头训练,直接调用训练好的模型即可,还没试过,后面实验再尝试一下使用保存的模型进行训练与预测。