【问题标题】:Approach for removing outliers of two dimensional data去除二维数据异常值的方法
【发布时间】: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 是的,这似乎可行。我试试看!

标签: python outliers


【解决方案1】:

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

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

如果您不想要机器学习,那么您必须自己修复阈值。所以你可以使用一个规范。有no.linalg.norm(p1 - p2),或者如果你想对指标进行更多控制,有cdist

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 2015-01-23
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多