如何将一条曲线平滑到与另一条曲线相同的粒度?

时间:2019-03-15 13:24:12

标签: pandas numpy scipy forecasting

我有一个函数返回趋势线和该线的预测。我需要确定预测区域内变化的“重要”时刻(即,斜率)。该系列中的每个时间步均为15分钟(因此,数据是离散的)。为此,我认为我需要:

  1. 从趋势线确定什么是重要的。让我们称它为s(n)
  2. 使预测线具有与趋势线相同的粒度(按粒度,我不是指时间步长的变化,而是曲线的“嘈杂性”),它们应该趋向于具有相同数量的相同规模的功能)
  3. 将预测中的每个时刻与s(n)进行比较,寻找每个有意义的斜率的起点

我需要做#2的原因是有时候预测(尤其是当它们不太好时)比观察到的数据“更加参差不齐”。

我看到了如何平滑曲线,例如:How to smooth a curve in the right way? 但是我看不到如何将平滑度调整到给定的粒度。如果存在将曲线馈入savgol_filter并调整超参数的方法,那就太好了。此解决方案How to smooth a curve with large noise which is only in certain part?可以平滑范围内的所有内容,因此尚不清楚如何自动执行该过程。

素描方法:

  1. 使用Polynomial.fit获得最佳拟合线。然后,根据观察到的数据计算MSE。
  2. 将savgol_filter应用于趋势线,增加窗口和多项式超参数,直到结果的MSE接近所观察数据的最佳MSE

缺点: 1.这可能是一个冗长的搜索。 2.很难避免局部最小值:例如,您可能先拟合多项式,然后拟合窗口。随着窗口的增加,您会不断尝试,然后在t_m_时会变得更糟。但后来趋势可能会反转:在t_m + n_可能更合适。

0 个答案:

没有答案