使用 sklearn 进行异常值检测

数据挖掘 机器学习 scikit-学习 异常检测 离群值
2022-01-24 23:20:34

我一直在阅读关于异常值检测的 sklearn 文档,甚至是文档提供的示例一旦我拟合了我的数据集,我所能做的就是将预测函数应用于估计器以找出异常值。但是,我想得到该点是异常值的概率。这可以在sklearn中完成吗?有 R 包来做吗?

我什至不知道sklearn使用的异常值检测方法是否有理论基础,可以让你给出概率。如果不是,那么告诉您什么是异常值和什么不是异常值的标准是什么?它是否考虑概率或某种非概率分数?

任何信息将不胜感激。

编辑

我希望异常值方法考虑数据的多元分布。我认为单变量检测方法相当差。

2个回答

最简单快捷的方法之一是绘制一个“箱线图”,其中箱线图上须线(T shaoed 线)上方的“点”表示异常值(参见附图)。我希望这是您正在寻找的。如果不是这样,请告诉我,也许我可以提供帮助。在此处输入图像描述

进行异常值检测的一个简单技巧是使用模型的输出概率。例如,如果您使用神经网络,您可以使用 softmax 输出,它会为您提供每个标签的概率:

p(y=yi)=eWiTx+bijeWjTx+bj

如果您的模型是准确的,那么对于数据集中的大多数点,概率应该在真实标签上达到峰值。但是,如果您有异常值,那么模型应该会感到困惑,然后返回分布在标签上的概率。您可以通过测量输出 softmax 概率分布 p(y) 的熵来测量这种分布:

H[p]=yp(y)logp(y),
在哪里y采用不同的输出类别(标签)之一。熵是不确定性的度量,所以如果你有H(p)=0,模型对输出有信心,而如果H[p]=log(Nc)(Nc标签的数量),模型不知道要预测什么。因此,使用熵的阈值(您可能必须根据您的具体问题调整该阈值),您可以将一个点归类为异常值。我认为这可能是高维数据的一个很好的起点。对于低维数据,你总是可以做一些密度估计,并使用密度作为阈值。