消除异常值/最适合 Python 中的 "spiky" 数据

Eliminating outliers / best fit for "spiky" data in Python

像这样处理数据还很陌生;我有两条曲线,我不确定如何处理,但我知道我想要的结果是什么。两个数据集的原始图如下(左)所示;我想我想要的粗略合身如下图(右)所示,叠加合身为红色。

第一个例子: 幅度的突然下降是数据获取方式的人为因素。这意味着它本质上是不可预测的,理想情况下我希望找到一种对这种行为具有鲁棒性的方法。

在第一种情况下,我可以尝试使用阈值来消除幅度的急剧下降,但在第二种情况下这对我没有帮助: , 我仍然有强烈的振荡,但最小值不再为 0。

编辑:使用@JamesPhillips的建议编写了一个简短的脚本后,拟合结果如下所示;可以确认这就是我要找的东西,并且比其他拟合算法更有效 better/faster。

一个可能的算法:像这样过滤数据...

从图表上显示的最小 X 值点开始,从最小 X 值迭代到最大 X 值。对于每个点:

1)如果下一个点的Y值大于或等于这个点的Y值,则包含它。

2) 如果下一个点的值小于该点 Y 值的 [cutoff]%,则将其排除。

3) 转到下一点。

运行过滤并测试[cutoff]的不同值,每次绘制结果图,看看[cutoff]的值是否符合您的要求。您可能需要一两个额外的过滤条件,但这应该是按照您的描述过滤数据的良好开端。