【问题标题】:Isolation Forest for Intrusion Detection System入侵检测系统隔离林
【发布时间】:2020-02-13 12:46:23
【问题描述】:

我目前正在尝试使用 Scikit Learn 创建一个简单的异常检测 sn-p。

程序接收一个 .csv 文件,然后将其分解为 Panda 的 DataFrame。 Dataframe 有 8 列:'Src IP'; 'Dst IP'; '运动'; 'd端口'; '协议'; '加载'; '数据包'; 'TCP 标志'。

我将数据放入 IsolationForest,如下所示:

    iForest = IsolationForest(n_estimators=128, max_samples='auto', max_features=1, behaviour='new', contamination='auto', random_state=None, n_jobs=-1, verbose=0, bootstrap=True)
    usecols=["Src IP","Dst IP","sPort","dPort","Protocol","Load","Packets","TCP Flags"]
    iForest.fit(data[usecols])

然后从 IForest 中获取异常值/异常:

    pred = iForest.predict(data[usecols])
    data['anomaly']=pred
    outliers=data.loc[data['anomaly']==-1]

一切都很好,但是,我的问题是: 如何使用 Isolation Forest 检测网络上的异常,同时独立于“污染”属性?

在 IDS 中,低误报率至关重要。在我的情况下,我通过选择一个百分比来决定哪些条目被“污染”。

我的目标是让 Isolation Forest 自动设置污染因子,知道如果 x.csv 100% 没有污染,然后在 y.csv 上找到污染百分比。

这应该是混合 IDS 的一部分,它使用签名分析和行为来检测基于流数据 (NetFlow) 的入侵。

TLDR:IsolationForest 需要接收干净的 .csv(无污染),然后检测一组新数据(另一个 .csv 或管道数据)的异常情况。使用 ScikitLearn 怎么可能?

【问题讨论】:

  • 似乎 sklearn 将在 v0.22 版本中准确地满足您的要求,其中污染因子可以选择自动计算。让我们看看它会如何!
  • @MaximeKan 谢谢你的洞察力 :) 我从一开始就想错了,在我的用例中,我不应该使用异常值检测来检测未损坏数据集中的异常,而是我应该正在使用新奇检测。在 Sklearn 文档中:异常值检测: 训练数据包含异常值,这些异常值被定义为远离其他观测值。(...) 新奇检测: 训练数据没有被异常值污染,我们有兴趣检测一个新的观察值是否是异常值。在这种情况下,异常值也称为新奇。
  • 我觉得你说的很有道理,这样可能会更成功!

标签: python scikit-learn outliers unsupervised-learning anomaly-detection


【解决方案1】:

如果你有一个只包含正常数据的训练集,那么设置contamination=0。要为异常选择适当的阈值,请使用验证集并绘制异常分数的直方图。如果没有标记数据,这只能以启发式方式完成:

要获得最大真阳性(但会牺牲假阳性),请根据您用于调查阳性的资源预算来设置阈值。您可以根据入站数据速率、直方图统计数据的预期正数以及每次评估的成本(时间/金钱)来计算此值。

为了最大限度地减少误报,请将阈值设置为稍微超出现有分数。然后假设训练/验证实际上不包含异常,任何新的和不同的东西都是异常的。有时这称为新颖性检测。

如果可以通过查看数据来确定某事是真还是假异常,我建议对异常分数最高的大约 10-100 个项目进行此操作。与标记所有数据相比,这通常会非常快,并且可以帮助估计误报率。

当您将此模型投入生产时,您的异常处理协议应确保将案例评估为异常/非异常。然后这是您未来标记的验证/测试数据,您可以使用它来调整阈值。

如果您确实在验证/测试集中(但在训练中没有)标记了异常/非异常,您可以使用它来优化阈值,以使用超参数搜索最大化/最小化所需指标。

【讨论】:

  • 没有标记数据,因此是无监督方法。仍然想知道无监督异常检测的最佳方法是什么
  • 你不必有标记的数据,但没有它你会想出一个没有它的阈值。我已更新答案以反映
  • 恐怕由于项目将受到审查,即使这只是其中的一小部分,采用启发式方法也很容易受到批评。这是一个学术项目。直方图统计是什么意思?可以自动化吗?是的,我选择了一种新颖性检测方法,但是,由于数据极不稳定,FP 率非常高......
  • 那么最好选择好你的阈值。或标记一些数据:)
  • @jonnor 感谢您的回答。能否请您看一下相关帖子here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多