首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >入侵检测系统中的隔离林

入侵检测系统中的隔离林
EN

Stack Overflow用户
提问于 2019-10-16 17:02:28
回答 1查看 437关注 0票数 0

我目前正在尝试使用Scikit学习创建一个简单的异常检测片段。

程序接收到一个.csv文件,然后将其分解为熊猫的DataFrame。Dataframe有8列:“Src IP”;“Dst IP”;“体育运动”;“dPort”;“协议”;“Load”;“数据包”;“TCP标志”。

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

代码语言:javascript
复制
    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中获取异常值/异常:

代码语言:javascript
复制
    pred = iForest.predict(data[usecols])
    data['anomaly']=pred
    outliers=data.loc[data['anomaly']==-1]

然而,我的问题是:如何使用隔离森林来检测网络上的异常,同时独立于“污染”属性呢?

在IDS中,具有较低的假阳性率是至关重要的。在我的例子中,我通过选择一个百分比来决定哪些条目被“污染”。

我的目标是使隔离森林自动设定污染因子,如果x.csv 100%清除污染,那么在y.csv上找出污染的百分比。

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

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

EN

回答 1

Stack Overflow用户

发布于 2020-02-25 22:20:05

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

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

为了最大限度地减少假阳性,将阈值设置为稍微超出现有分数。因此,假设培训/验证实际上不包含任何异常,任何新的和不同的都是反常的。有时这被称为新颖性检测。

如果可以通过查看数据来确定某物是真异常还是假异常,我建议对大约10-100个异常得分最高的项目这样做。这将通常是非常快的标记所有的数据,并有助于估计假阳性率。

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

如果在验证/测试集中(但不是在培训中)标记了异常/不异常,那么可以使用它来优化阈值,从而使用超参数搜索来最大化/最小化所需的度量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58418348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档