【问题标题】:Automatically truncating a curve to discard outliers in matlab自动截断曲线以丢弃matlab中的异常值
【发布时间】:2015-07-10 01:56:40
【问题描述】:

我正在生成一些数据,其图如下所示

在所有的情节中,我在开头和结尾都有一些异常值。目前我正在截断第一个和最后 10 个值。有没有更好的方法来处理这个问题?

我基本上是在尝试自动识别下面显示的两点。

【问题讨论】:

  • 删除第一个/最后 10 个样本有什么问题?你知道什么是KISS吗? Keep It Stupid Simple.
  • 它并不总是第一个和最后一个 10。但我只在开始和结束时得到异常值。通过将其固定为 10 i 会丢失数据或数据中可能仍有异常值。
  • 这是一个很好的角度:您可以从每一端走线,直到满足某些标准 - 对数或倒数的导数可能会起作用。
  • 谢谢。导数是个好主意。

标签: matlab plot statistics outliers


【解决方案1】:

这是一个相当普遍的问题,有很多方法,通常你会使用一些底层系统的先验知识来使其易于处理。

因此,例如,如果您希望看到上面的模式 - 快速下降、线性部分(向上或向下)和快速上升 - 您可以尝试对曲线求导并寻找较大的值和/或符号逆转。或许先对数据进行分箱会有所帮助。

如果您的模式不是那么容易定义,但您期望线性趋势,您可以使用 fit 将数据拟合到适当的曲线类别,然后将异常值检测为拟合误差超过给定阈值的那些。

在任何一种情况下,您仍然必须选择阈值 - 均值、方差和高阶矩在这里会有所帮助,但您可能必须分析现有数据(您的训练集)以凭经验确定值。

也许,毕竟,正如 Shai 指出的那样,您可能会发现删除第一个和最后十个点可以为您花费的时间带来最好的结果(参见Pareto principle)。

【讨论】:

    猜你喜欢
    • 2017-09-22
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2016-05-24
    相关资源
    最近更新 更多