对这里的这一切都很陌生的学生。我目前正在使用 KDDcup 99 数据使用各种 ML 模型(和 ANN)进行入侵检测。我的问题是我经常得到 99% 的准确性。目前我主要关注二进制分类(正常与攻击)我发现了我的数据预处理方法中的问题,在修复它们之后,我对输入数据的有效性更有信心,但我仍然得到了 99%不再信任。(特别是因为我刚刚使用具有所有默认参数的 SVM 获得了 99% 的准确率)。
我的数据应该在 2 个类之间平衡,所以我假设如果机器没有学习,那么它的准确率会达到 50% 左右。我觉得我在这里的某个地方犯了一个错误,或者我只是低估了这些 ML 算法的力量?
这是我的预处理步骤:
1-从该数据中删除重复项(大约 75% 的数据集是重复项)
2-使用随机抽样通过删除“正常”事件来平衡巨大偏差的数据。(此步骤后50%正常50%攻击)
3-Drop 1 具有 0 方差的特征
4-Shuffle 数据然后拆分 70/30 训练/测试
5-One 使用 CountVectorizer 对包含字符串(ex protocol type = [icmp, tcp.udp])的训练数据中的输入特征进行热编码,或者将此数据转换为简单的整数虚拟变量。
使用 StandardScaler 对训练集中的数字连续数据列进行 6-Z-score 标准化
7-将这些训练有素的归一化/编码器方法应用于测试集
我的猜测是存在一些数据泄漏,或者其中一个特征与分类直接/几乎 1 对 1 对应。
昨晚我正在试验一些改变,看看是否有什么会降低准确性。使用 KNN,我检查了每个特征作为唯一的输入。由于数据集是平衡的,您应该期望每个单独的特征有 50% 的准确度。大多数功能在单独检查时确实得到了 50% 的分数,但其中两个脱颖而出。当唯一的输入是“标志”特征时,模型得分为 95%,而当唯一的特征是“服务”特征时,得分为 93%。这是否意味着应该删除这些数据?
我也知道这个数据集存在缺陷。也许 99% 是可能的,因为这个数据集不是实际网络流量的准确表示,而更像是一个“玩具”数据集?
编辑:我想知道该模型是否能够实际达到 99%,因为该数据本质上是有缺陷的(请参见下面的引用)。我不确定如何根据给定的特征计算 TTL,但如果模型发现它可以解释 99% 的二进制情况。就多类而言,这可能也适用于区分正常/攻击尝试,然后剩余的特征帮助模型从那里找出它是什么类型的攻击。
“2003 年,Mahoney 和 Chan 构建了一个简单的入侵检测系统,并针对 DARPA tcpdump 数据运行它。他们发现了许多违规行为,包括——由于数据的生成方式——所有恶意数据包的 TTL 为 126或 253,而几乎所有良性数据包的 TTL 为 127 或 254。”