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

Approach for removing outliers of two dimensional data

我正在编写一个 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 个点。在我看来,这个解决方案似乎很糟糕。有人有其他解决方案吗?

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

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

如果您不想要 ML,那么您必须为自己设定阈值。所以你可以使用一个规范。有 no.linalg.norm(p1 - p2) 或者如果你想对指标有更多的控制有 cdist:

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