【问题标题】:How remove outliers from 2 dimension array in python如何从python中的二维数组中删除异常值
【发布时间】:2020-09-29 21:21:07
【问题描述】:

我不知道如何从二维数据中去除异常值。 例如我有:

import numpy as np

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([1, 2, 3, 4, 5, 1, 7, 8, 2, 10])

plt.xlabel("time")
plt.ylabel("value")

plt.scatter(x, y, color = "g", marker = "o") 

如您所见,异常值是位于第 5 和第 8 X 位置的点。

如何在python中找到并删除它们?

重要

这只是一个示例数据。如果您想帮助我,请提供有关如何处理此类问题的一般答案。 IQR 似乎不能解决这个问题。

【问题讨论】:

  • 数据是一直是这样线性增加的线,还是会减少?
  • 您可以测量不同点的斜率并根据平均值对它们进行阈值
  • 这种异常值检测问题是为RANSAC量身定做的。它的实现简单易行,该维基百科文章中给出了一个伪代码示例。试一试。
  • 你用什么算法来决定什么是异常值,什么不是异常值?到目前为止,根据您自己的研究,您尝试了什么,您的尝试有什么问题?如果您正在寻找用于一般异常值检测的数学算法或统计测试,可以使用数学和统计堆栈交换站点。该网站要求minimal reproducible example

标签: python outliers


【解决方案1】:

这通常是通过计算数据集中每个点的标准偏差来完成的,然后选择一个偏差值,超过该偏差值,您将丢弃具有该值的数据点。

您正在使用numpy。我不确定,但我希望numpy 模块包括在一组数据点上计算标准偏差的能力。 Check this out.

【讨论】:

  • 模型是二维线的时候就没那么简单了。考虑示例图像右上角和左下角的点 - 这些点与质心的偏差最大,但它们实际上是内点集的一部分。
  • 是的,我想我是在考虑每个点与线的距离的偏差。你首先要为这些点画一条线。然后计算每个点到线的距离,并使用它们来确定要丢弃哪些点,然后将新线拟合到剩余的点。自从我这样做以来已经有一段时间了。
  • 在您首先拒绝异常值之前,您无法准确地将线拟合到点。
猜你喜欢
  • 2021-01-17
  • 1970-01-01
  • 2021-12-13
  • 2018-12-26
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多