一、简单移动平均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 npa = [1,4,5,10,2,8,9]h = 3# 注意要单独处理一下h=1的情况if h==1:# 相当于不平滑passelse: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 npa = [1,4,5,10,2,8,9]h = 3# 注意要单独处理一下h=1的情况if h==1:# 相当于不平滑passelse:half_h = h // 2b[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实现
如果觉得《简单移动平均SMA和指数移动平均EMA》对你有帮助,请点赞、收藏,并留下你的观点哦!