在 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中异常检测方法实战(附源码 超详细)