数据平滑的两个实践

关于数据平滑

工作里遇到过两个需要对数据做平滑的 case,因为数据本身特征不同,两次使用了不同的方法。

scipy.signal.medfilt

doc link

这份数据量相对比较大,做平滑的目的是从比较杂乱的线条中找到比较明显的趋势。

before_smoothing

medfilt 顾名思义就是填充中位数(medians filt),以此降低噪声。下图就是平滑后的效果。

image-20200323161703422

这个方法当时已经满足了 case 的需求。

scipy.signal.savgol_filter

doc link

最近在处理的一套新数据,采用 medfilt 就不太合适。这份数据集的数据量噪音大的同时,数据量较小,数据并不连续。

before_smoothing

对这个数据集填充中位数进行平滑,导致了出现了如图所示的异常情况。

median_smoothing

重新思(stack)考(-overflow)了之后,尝试采用卷积平滑的方法。

sg_smoothing

以上两个 case 纯属为了实际项目折腾出来的,其中并没有严谨地去论证最优的 window_length,以及 noise 和 bias 之间的取舍。