前言
针对 CIC-IDS2017 数据集,采用了其中常见的机器学习算法对该数据集进行了训练和测试,这里记录一下测试结果。
关于 CIC-IDS2017 数据集介绍可以参照:CIC-IDS2017数据集特征介绍 | 蓝亚之舟博客
关于下面各个算法使用的代码具体参考:CIC-IDS2017数据集训练和测试 | 蓝亚之舟博客
1、采用算法和数据相关特征
采用机器学习算法如下:
- 支持向量机(SVM)
- 逻辑回归
- K 近邻算法
- 决策树
- 随机森林
- 朴素贝叶斯
- Adaboost
数据集相关特征如下:
- 数据条数:250w 左右
- 数据特征:79 个
- 数据标签:共有 14 个
2、各个算法运行结果
2.1 支持向量机(SVM)
(1)时间对比
可能是由于数据集比较大,又或者是数据特征,SVM 运行时间比较大,于是我将整个数据集切分了一部分,从百分之一依次递增,主要是想看看数据量的增加对于 SVM 运行时间的影响,结果如下:
让我好奇的是测试时间为什么也是接近指数增加,按理来说应该是倍数增加才对。
(2)不同数据预处理方法对准确度的影响
由上图可以看出,准确率由高到低依次是:标准化>归一化>正则化>原数据结果。
2.2 逻辑回归
(1)逻辑回归时间对比
逻辑回归的测试时间比较符合我的预期,因为是用公式直接预测结果,其运行时间是和测试数据的数量成正比,且是倍数关系,只不过是因为数据太少了,没有呈现出来。
(2)不同数据预处理方法对准确度的影响
归一化和正则化的准确率和 SVM 结果是一样的,这里就不展示了,这里贴了两个对比是为了看看随着数据的增加,数据预处理方法的影响。
2.3 K 近邻算法
(1)k 近邻时间对比
不得不说,K 近邻算法是我最喜欢,也是最讨厌的算法,喜欢是因为简单易懂,讨厌是因为针对大数据量的时候,其速度太慢了,而且训练和测试时间都是呈现指数增长:
(2)不同数据预处理方法对准确度的影响
2.4 决策树
因为决策树算法运行时间较短,这里就不做时间对比了,直接对比一下数据预处理结果吧:
可以看到,决策树运行时间很多(数据集是整个数据集),而且准确率也相当高,三种数据预处理方法,正则化一如既往的比较低。
2.5 随机森林
2.6 Adaboost
2.7 朴素贝叶斯
由上图可以看到,朴素贝叶斯准确率最低,并且数据预处理方法对其准确率提高很大。
3、总结
算法 | 时间 | 准确度 | 标准化是否影响 |
---|---|---|---|
SVM | 近似指数增长 | 95% | 是 |
逻辑回归 | 近似指数增长 | 95% | 是 |
K 近邻 | 近似指数增长 | 99%(百分之十) | |
决策树 | 129s | 99.70% | |
随机森林 | 334s | 99.88% | |
Adaboost | 207s | 84.65% | |
朴素贝叶斯 | 64s | 69.95% | 否 |
结论:
- 对于训练利用公式推导的机器学习算法如 SVM、逻辑回归和朴素贝叶斯,其数据格式对其训练结果有很大影响;
- 对于训练过程中使用梯度上升等优化算法来寻找最优的机器学习算法,其训练时间随着数据集的增大近似于指数增长;
- 针对当前数据集,在数据预处理方法中,标准化数据准确率高于归一化,而归一化方法准确率高于正则化,使用数据预处理方法准确率高于原数据准确率.
继续阅读
评论