annotate tvii/average.py @ 70:351fc97bb996

add error computation + test functions
author Jeff Hammel <k0scist@gmail.com>
date Sun, 17 Dec 2017 13:22:44 -0800
parents 0e6743d5416d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
1 """
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
2 exponentially weighted averages
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
3
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
4 v[0] = theta[0]
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
5 v[t] = beta*v[t-1] + (1-beta)*theta[t]
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
6
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
7 =>
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
8 v[t] as approximately averaged over 1/(1-beta) counts
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
9
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
10 Bias correction:
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
11 v[t] / (1 - beta**t)
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
12 """
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
13
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
14 def exponential_weighted_average(theta, beta=0.9):
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
15 """a form of moving window"""
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
16 # TODO: consider a generator; there isn't much state here
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
17 # v = theta[0]
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
18 # v = beta*v (1-beta)*theta[1]
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
19 retval = [theta[0]]
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
20 for value in theta[1:]:
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
21 retval.append(beta*retval[-1] + (1.-beta)*value)
0e6743d5416d notes on averaging
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
22 return retval