enmm,关于这个EMA算法,是在flink源码偶然间看到的,在网上搜了几篇EMA算法的介绍,感觉就这个介绍的很好=,=
1、用滑动平均估计局部均值
滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以用来估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关。
变量
v
v
v在
t
t
t时刻记为
v
t
v_{t}
vt,
θ
t
θ_{t}
θt 为变量
v
v
v 在
t
t
t 时刻的取值,即在不使用滑动平均模型时
v
t
v_{t}
vt=
θ
t
θ_{t}
θt,在使用滑动平均模型后,
v
t
v_{t}
vt 的更新公式如下:
v
t
=
β
⋅
v
t
−
1
+
(
1
−
β
)
⋅
θ
t
v_{t}=β⋅v_{t}−1+(1−β)⋅θ_{t}
vt=β⋅vt−1+(1−β)⋅θt
上式中,
β
∈
[
0
,
1
)
β∈[0,1)
β∈[0,1)。
β
=
0
β=0
β=0 相当于没有使用滑动平均。
假设起始
v
0
=
0
,
β
=
0.9
v_{0}=0,β=0.9
v0=0,β=0.9,之后每个时刻,依次对变量 v 进行赋值,不使用滑动平均和使用滑动平均结果如下:
t | 不使用滑动平均模型,即给v直接赋值θ | 使用滑动平均模型,按照公式(1)更新v | 使用滑动平均模型,按照公式(2)更新v_biased |
---|---|---|---|
0, 1, 2, … , 35 | [0, 10, 20, 10, 0, 10, 20, 30, 5, 0, 10, 20, 10, 0, 10, 20, 30, 5, 0, 10, 20, 10, 0, 10, 20, 30, 5, 0, 10, 20, 10, 0, 10, 20, 30, 5] | [0, 1.0, 2.9, 3.61, 3.249, 3.9241, 5.5317, 7.9785, 7.6807, 6.9126, 7.2213, 8.4992, 8.6493, 7.7844, 8.0059, 9.2053, 11.2848, 10.6563, 9.5907, 9.6316, 10.6685, 10.6016, 9.5414, 9.5873, 10.6286, 12.5657, 11.8091, 10.6282, 10.5654, 11.5089, 11.358, 10.2222, 10.2, 11.18, 13.062, 12.2558] | [0, 10.0, 15.2632, 13.321, 9.4475, 9.5824, 11.8057, 15.2932, 13.4859, 11.2844, 11.0872, 12.3861, 12.0536, 10.4374, 10.3807, 11.592, 13.8515, 12.7892, 11.2844, 11.1359, 12.145, 11.9041, 10.5837, 10.5197, 11.5499, 13.5376, 12.6248, 11.2844, 11.1489, 12.0777, 11.8608, 10.6276, 10.5627, 11.5365, 13.4357, 12.5704] |
==》
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b8aa92ddbb3713f74e48d44b808b2ed8.png)