【发布时间】:2018-01-18 08:06:20
【问题描述】:
我正在编写一个 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 个点。在我看来,这个解决方案似乎很糟糕。有人有其他解决方案吗?
【问题讨论】:
-
你看过隔离福雷斯特吗?你可以查看 scikit-learn:scikit-learn.org/stable/modules/outlier_detection.html
-
@Y0da 不是这个特定的方法,但我之前看过其他机器学习方法。数据不像我希望的那样容易用于隔离和创建训练集等,所以如果我能想出一个不涉及 ML 的解决方案,那将是更可取的。
-
如果您不想要 ML,那么您必须自己修复阈值。所以你可以使用一个规范。见
scipy.spatial.distance.cdistdocs.scipy.org/doc/scipy/reference/generated/… -
@Y0da 是的,这似乎可行。我试试看!