在Sklearn异常检测方法中,将“contamination”参数设置为“auto”会发生什么?

4
我有一个数据集,需要能够控制异常检测模型(孤立森林、椭圆包络、OneClassSVM等)将给定点视为异常值的程度(类似于Z-score或IQR-score)。这意味着我不想事先指定数据集中异常点的百分比,也就是所谓的 contamination 参数,而是希望这个百分比取决于我想让模型多么严格。这和将参数 contamination 设置为 'auto' 是否相同?
这是 Sci-kit Learn 包对此的说明:“如果设置为 'auto',则阈值的确定方式与原始论文相同。”
这个“原始论文”的是指哪篇?将 contamination 参数设置为 'auto' 能解决我的问题吗?
2个回答

2

我一直在看论文,但没有太大的进展,但是当我查看代码时,我找到了答案。请注意实现的这部分内容:

    if self.contamination == "auto":
        # 0.5 plays a special role as described in the original paper.
        # we take the opposite as we consider the opposite of their score.
        self.offset_ = -0.5
        return self

    # else, define offset_ wrt contamination parameter
    self.offset_ = np.percentile(self.score_samples(X),
                                 100. * self.contamination)

您可以在此处查看完整实现:链接
当您将contamination='auto'设置时,影响模型预测的offset_值将设置为-0.5,而如果您在contamination参数中使用float值,则偏移值将发生变化以实现先前传递的污染率百分比。因此,模型将根据这个决定确定您数据中的污染百分比。

谢谢您的回复!确实,这也是我最终找到的。然而,-0.5的offset_值在技术上是否也对应于给定的污染百分比呢?在这种情况下,将污染参数设置为“自动”并不能帮助我。 - Houssam Metni
是的,-0.5对应一个百分比,但因为它是一个固定值,所以不会影响预测,因此样本是否为异常值的决策完全由算法定义。 - lalfab
这意味着污染参数不会影响我们的预测,对吗?如果是这样的话,这是一个好迹象。在这种情况下,一个点是异常值还是内点的程度可以由用户定义,对吗?因为决策函数现在只会提供一个异常分数,如果我理解正确的话。 - Houssam Metni
@lalfab哦,我已经在这里更新了问题(https://stats.stackexchange.com/questions/515654/how-can-we-introduce-an-anomaly-class-as-a-positive-class-to-sklearn-isolationfo) - Mario

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接