删除二维数据异常值的方法

时间:2017-08-10 07:47:33

标签: python outliers

我正在编写一个Python程序,用于查找页面上感兴趣的区域。所有感兴趣的值的页面上的位置都给了我,但是一些值(通常只有一个或两个)远离其他值,我想删除它们。数据集不是很大,少于100个数据点,但我需要多次这样做。

我在第一象限的两个轴(x和y)上有一个笛卡尔坐标系,所以只有正值。

我的数据点表示在此坐标系上绘制的框,我将其存储为元组中的两个坐标对的集合。由于所有线都是直的,因此可以通过两个坐标对绘制一个框。示例:(8,2,15,10)将绘制一个带有索引(x,y)=(8,2),(8,10),(15,10)和(15,2)的框。

我正在尝试删除此集中的异常值,但我很难找到一个好的方法。我已经考虑通过找到IQR并删除满足这些标准的所有点来删除异常值:

Q1 - 1.5 * IQR或

Q3 + 1.5 * IQR

这里的问题是我很难弄清楚因为这些值不仅仅是坐标而是区域,如果你愿意的话。然而,它们是重叠的,因此它们也不适合直方图。

首先,我想我可能会为每个盒子跨越的整个值添加一个点,在这种情况下,示例框会创建56个点。在我看来,好像这个解决方案非常糟糕。有没有人有任何替代解决方案?

1 个答案:

答案 0 :(得分:0)

主要有两种方法:要么修正阈值,要么让机器学习为你推断它。

对于机器学习,您可以使用Isolation Forest

如果你不想要ML那么你必须自己确定门槛。所以你可以使用一个标准。有no.linalg.norm(p1 - p2)或者如果您想要更多地控制指标,则cdist

scipy.spatial.distance.cdist(p1, p2)