61
|
1 """
|
|
2 exponentially weighted averages
|
|
3
|
|
4 v[0] = theta[0]
|
|
5 v[t] = beta*v[t-1] + (1-beta)*theta[t]
|
|
6
|
|
7 =>
|
|
8 v[t] as approximately averaged over 1/(1-beta) counts
|
|
9
|
|
10 Bias correction:
|
|
11 v[t] / (1 - beta**t)
|
|
12 """
|
|
13
|
|
14 def exponential_weighted_average(theta, beta=0.9):
|
|
15 """a form of moving window"""
|
|
16 # TODO: consider a generator; there isn't much state here
|
|
17 # v = theta[0]
|
|
18 # v = beta*v (1-beta)*theta[1]
|
|
19 retval = [theta[0]]
|
|
20 for value in theta[1:]:
|
|
21 retval.append(beta*retval[-1] + (1.-beta)*value)
|
|
22 return retval
|