一、简单移动平均SMA
最近有一个平滑的需求:
设置平滑期数h(奇数),每期点平滑方法是:取该期前后共m期(含本期)点的平均值。如果前或后没有足够的点则不用平滑。
特别地,如果取m=1,那就是取本期即可,相当于不平滑;如[1,3,2,4] -> [1,3,2,4]
如果取m=3,那就是取本期前一期、本期以及本期后一期的平均值;如[1,3,2,4] -> [1,2,3,4]
,其中开头的1和末尾的4是不用平滑的,因为前或后没有足够的点。2 = (1+3+2)/3,3 = (3+2+4)/3
这种平滑方式就是简单移动平均,不过保留了两端的点。下面给出带两端和不带两端的两种方式。
1、不带端点:
import numpy as np
a = [1,4,5,10,2,8,9]
h = 3
if h==1:
pass
else:
print(np.convolve(a, np.ones(h)/h, mode='valid'))
Out[13]: array([3.33333333, 6.33333333, 5.66666667, 6.66666667, 6.33333333])
2、带端点
import numpy as np
a = [1,4,5,10,2,8,9]
h = 3
if h==1:
pass
else:
half_h = h // 2
b[half_h:-half_h] = np.convolve(a, np.ones(h)/h, mode='valid')
print(b)
Out[20]:
[1, 3.333333333333333, 6.333333333333333, 5.666666666666667, 6.666666666666666, 6.333333333333333, 9]
二、指数移动平均EMA
接触这个是学弟做深度学习相关毕设问我的,用于对模型参数做平均。
普通的EMA可以看这个实现移动平均指数平滑python实现
但在深度学习方面的应用主要还是看这两个理解吧
EMA(指数移动平均)及其深度学习应用
【炼丹技巧】指数移动平均(EMA)的原理及PyTorch实现
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)