自动截断曲线以丢弃matlab中的异常值
Automatically truncating a curve to discard outliers in matlab
我正在生成一些数据,其图表如下所示
在所有的图中,我在开始和结束时都得到了一些异常值。目前我正在截断第一个和最后 10 个值。有没有更好的方法来处理这个问题?
我基本上是在尝试自动识别如下所示的两点。
这是一个相当普遍的问题,有很多方法,通常您会使用一些先验底层系统知识来使其易于处理。
因此,例如,如果您希望看到上面的模式 - 快速下降、线性部分(向上或向下)和快速上升 - 您可以尝试对曲线求导并寻找较大的值 and/or 符号反转。或许先把数据装箱会有帮助。
如果您的模式不是那么容易定义,但您期望线性趋势,您可以使用 fit
将数据拟合到适当的 class 曲线,然后检测异常值作为那些错误的从拟合超过给定的阈值。
在任何一种情况下,您仍然必须选择阈值 - 均值、方差和高阶矩在这里可以提供帮助,但您可能必须分析现有数据(您的训练集)以根据经验确定值。
或许,正如 Shai 指出的那样,在所有这些之后,您可能会发现去掉前十个点和最后十个点可以为您花费的时间提供最好的结果(参见 Pareto principle)。
我正在生成一些数据,其图表如下所示
在所有的图中,我在开始和结束时都得到了一些异常值。目前我正在截断第一个和最后 10 个值。有没有更好的方法来处理这个问题?
我基本上是在尝试自动识别如下所示的两点。
这是一个相当普遍的问题,有很多方法,通常您会使用一些先验底层系统知识来使其易于处理。
因此,例如,如果您希望看到上面的模式 - 快速下降、线性部分(向上或向下)和快速上升 - 您可以尝试对曲线求导并寻找较大的值 and/or 符号反转。或许先把数据装箱会有帮助。
如果您的模式不是那么容易定义,但您期望线性趋势,您可以使用 fit
将数据拟合到适当的 class 曲线,然后检测异常值作为那些错误的从拟合超过给定的阈值。
在任何一种情况下,您仍然必须选择阈值 - 均值、方差和高阶矩在这里可以提供帮助,但您可能必须分析现有数据(您的训练集)以根据经验确定值。
或许,正如 Shai 指出的那样,在所有这些之后,您可能会发现去掉前十个点和最后十个点可以为您花费的时间提供最好的结果(参见 Pareto principle)。