CIC-IDS2017使用CNN进行分类
前言
原来是使用DNN进行分类的,今天使用CNN来测试一下二分类与多分类,与DNN比较一下,看下哪个模型效果更好,把表现更好的换到基础模型里去
代码
二分类代码
1 | from keras.models import Sequential |
多分类代码
1 | import numpy as np |
实验结果
二分类
一定要比的话,CNN效果比DNN效果好一点,因为两种方法分类效果都很好,只有百分之零点几的误差,但是总体上来说是CNN效果比DNN好,光看分错样本的数量就能看出来,DNN分错样本数在3000左右,或者3000多一点,但是使用CNN进行分类每次分错样本数都在3000以内
第一次
第二次
使用DNN二分类效果
多分类
CNN与DNN多分类对比效果如下表所示,整体效果还是CNN更好一些,且CNN仅训练了30轮,DNN训练了50轮
| 类别 | CNN | DNN | winner |
|---|---|---|---|
| BENIGN | Accuracy: 0.9940 Precision: 0.9989 Recall: 0.9952 F1 Score: 0.9970 FAR: 0.0037 |
Accuracy: 0.9894 Precision: 0.9989 Recall: 0.9904 F1 Score: 0.9947 FAR: 0.0034 |
CNN |
| Bot | Accuracy: 0.4446 Precision: 0.5223 Recall: 0.7494 F1 Score: 0.6155 FAR: 0.0006 |
Accuracy: 0.2160 Precision: 0.2172 Recall: 0.9744 F1 Score: 0.33552 FAR: 0.0029 |
CNN |
| DDoS | Accuracy: 0.9929 Precision: 0.9949 Recall: 0.9979 F1 Score: 0.9964 FAR: 0.0003 |
Accuracy: 0.9597 Precision: 0.9618 Recall: 0.9977 F1 Score: 0.9794 FAR: 0.0023 |
CNN |
| DoS GoldenEye | Accuracy: 0.9667 Precision: 0.9788 Recall: 0.9874 F1 Score: 0.9831 FAR: 0.0001 |
Accuracy: 0.9518 Precision: 0.9631 Recall: 0.9879 F1 Score: 0.9753 FAR: 0.0002 |
CNN |
| DoS Hulk | Accuracy: 0.9726 Precision: 0.9773 Recall: 0.9951 F1 Score: 0.9861 FAR: 0.0025 |
Accuracy: 0.9715 Precision: 0.9807 Recall: 0.9904 F1 Score: 0.9855 FAR: 0.0021 |
相等 |
| DoS Slowhttptest | Accuracy: 0.8860 Precision: 0.9008 Recall: 0.9818 F1 Score: 0.9395 FAR: 0.0003 |
Accuracy: 0.8507 Precision: 0.8665 Recall: 0.9791 F1 Score: 0.9193 FAR: 0.0001 |
CNN |
| DoS slowloris | Accuracy: 0.9325 Precision: 0.9424 Recall: 0.9888 F1 Score: 0.9651 FAR: 0.0001 |
Accuracy: 0.8741 Precision: 0.8878 Recall: 0.9827 F1 Score: 0.9328 FAR: 0.0003 |
CNN |
| FTP-Patator | Accuracy: 0.9770 Precision: 0.9850 Recall: 0.9918 F1 Score: 0.9884 FAR: 0.0001 |
Accuracy: 0.9862 Precision: 0.9931 Recall: 0.9931 F1 Score: 0.9931 FAR: 0.0000 |
DNN |
| Heartbleed | Accuracy: 1.0000 Precision: 1.0000 Recall: 1.0000 F1 Score: 1.0000 FAR: 0.0000 |
Accuracy: 1.0000 Precision: 1.0000 Recall: 1.0000 F1 Score: 1.0000 FAR: 0.0000 |
|
| PortScan | Accuracy: 0.9965 Precision: 0.9988 Recall: 0.9977 F1 Score: 0.9983 FAR: 0.0001 |
Accuracy: 0.9965 Precision: 0.9993 Recall: 0.9972 F1 Score: 0.9983 FAR: 0.0000 |
相等 |
| SSH-Patator | Accuracy: 0.8933 Precision: 0.9037 Recall: 0.9873 F1 Score: 0.9437 FAR: 0.0003 |
Accuracy: 0.9165 Precision: 0.9275 Recall: 0.9873 F1 Score: 0.9565 FAR: 0.0002 |
DNN |
表现效果
都使用推荐超参数,在CIC-IDS2017数据集上二者表现不相上下,都能达到各指标98%~99%的表现效果,误差对比也不大,主要是因为本身CIC-IDS2017数据集的表现很优秀,后续还要在UNSW-NB15数据集上测试一下两种深度学习模型的表现效果,那个数据集本身一般般,应该能更好对比出两种模型的优劣,而且现在还是没有调整最优超参数,如果花时间炼一下丹应该能更加精进一步,取得更好一些的效果
存在问题
无论是单独使用GeometricSMOTE+DNN还是使用GeometricSMOTE+CNN,模型都太过简单,工作量不足,需要在现有模型上添加上其他模型或者算法,提高工作量,更好唬人,不管加上去的模型或算法能不能提高检测效果,只要它不降低检测效果就可以堆上去,反正这个领域的论文都是在当组合怪,现在还没有找到合适的算法或者模型,可以尝试一下下面的方向:
- 集成学习:使用集成方法,如随机森林、梯度提升树(如XGBoost或LightGBM)与CNN结合,利用CNN提取特征后用集成模型进行分类
- 特征选择与提取:在数据预处理阶段,应用特征选择技术(如Lasso回归、PCA)来选择重要特征,减少噪声
- 模型融合:将多个模型(例如CNN、RNN、决策树等)进行融合,通过投票或加权平均来提高分类性能
- 异常检测方法:结合传统的异常检测算法(如Isolation Forest或One-Class SVM)作为前处理步骤,先识别出可能的异常样本,再使用CNN进行分类
师兄的论文题目是基于图像凸包特征的CBAM-CNN网络入侵检测方法,他选择了凸包算法作为论文中的一个凸出点,他最开始的是仿射变换。
我也要找到一种算法加进模型里去,作为数据预处理阶段使用,因为数据预处理完之后就开始训练了,套用的都是现有的模型,不好去修改它,要么就做多个分类器进行模型融合,要么就是在训练开始之前使用方法进行处理,或者其他阶段也能插东西进去,但是看论文也没见到过。




