AE+DNN(CIC-IDS2017) 效果不错
前言
使用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是最简单的一种过采样方法,它通过随机复制少数类样本来增加样本数量。
A hybrid Intrusion Detection System based on Sparse autoencoder and Deep
Neural Network2021年发表
期刊不错 Computer Communications
这个也是在UNSW-NB15数据集上做多分类的,用的是SAE-DNN模型,实验结果如下,每一项都是99.9%,很夸张,估计是保留了attack_cat列的效果,而且使用其他例如CNN、LSTM加上SAE的效果也是99%,玄乎
A fast network intrusion detection system
using adaptive synthetic oversampling and
LightGBM2021年文章 可以借鉴它的写法
这篇文章使用的模型是LightGBM+ADASYN,在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,下次用的时候不用从头训练,直接调用训练好的模型即可,还没试过,后面实验再尝试一下使用保存的模型进行训练与预测。







