栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

简单移动平均SMA和指数移动平均EMA

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简单移动平均SMA和指数移动平均EMA

一、简单移动平均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
# 注意要单独处理一下h=1的情况
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
# 注意要单独处理一下h=1的情况
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实现

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886708.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号