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



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

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

对于机器学习,可以使用隔离林。

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

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

最新更新