在 Sklearn 异常值检测方法中将“污染”参数设置为“自动”有啥作用?

Posted

技术标签:

【中文标题】在 Sklearn 异常值检测方法中将“污染”参数设置为“自动”有啥作用?【英文标题】:What does setting the 'contamination' parameter to 'auto' in Sklearn Outlier Detection methods do?在 Sklearn 异常值检测方法中将“污染”参数设置为“自动”有什么作用? 【发布时间】:2020-11-14 08:12:38 【问题描述】:

我有一个数据集,我需要能够控制异常值检测模型(隔离森林、椭圆包络、OneClassSVM...)在多大程度上将给定点视为异常值(类似于 Z 分数或 IQR 分数)。这意味着我不想提前指定我的数据集中异常点的百分比,也就是众所周知的contamination 参数,但我希望这个百分比取决于我希望我的模型有多“挑剔”。这和将参数contamination设置为'auto'一样吗?

以下是 Sci-kit Learn 软件包对此的说明: “如果是‘auto’,阈值的确定与原始论文中的一样”。

这是指哪篇原始论文?将contamination 参数设置为“自动”是否可以解决我的问题?

【问题讨论】:

【参考方案1】:

我在看论文时没有成功,但是看代码给了我答案。注意这部分的实现:

    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)

您可以查看完整的实现here。

当您设置contamination='auto' 时,影响模型预测的offset_ 值设置为-0.5,而如果您在contamination 参数中使用float 值,则偏移值会有所不同,以达到您之前通过的污染百分比。因此,模型将根据此决定确定数据中的污染百分比。

【讨论】:

感谢您的回复!事实上,这也是我最终发现的。但是,从技术上讲,-0.5 的 offset_ 值不也对应于给定的污染百分比吗?在这种情况下,将污染参数设置为“自动”不一定对我有帮助 是的,-0.5 对应一个百分比,但是因为它是一个固定值,它不会影响预测,因此样本是否是异常值的决定完全由算法定义。跨度> 所以这意味着污染参数最终不会影响我们的预测?如果是这样,这是一个好兆头。在这种情况下,一个点是异常值或内点的“程度”可以由用户定义,对吧?由于决策函数现在所做的只是给出异常分数,如果我理解得很好 @lalfab 哦,我更新了问题here

以上是关于在 Sklearn 异常值检测方法中将“污染”参数设置为“自动”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

带有污染训练数据的深度时间序列异常检测模型的鲁棒学习

带有污染训练数据的深度时间序列异常检测模型的鲁棒学习

带有污染训练数据的深度时间序列异常检测模型的鲁棒学习

数据挖掘离群点检测方法详解及Sklearn中异常检测方法实战(附源码 超详细)

异常检测 | 使用孤立森林 sklearn.ensemble.IsolationForest 分析异常流量

web安全之机器学习入门——3.1 KNN/k近邻算法