diff options
Diffstat (limited to 'hawkes/refine.py')
| -rw-r--r-- | hawkes/refine.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/hawkes/refine.py b/hawkes/refine.py new file mode 100644 index 0000000..81fd547 --- /dev/null +++ b/hawkes/refine.py @@ -0,0 +1,43 @@ +from cPickle import load +from itertools import product +from math import exp, log + + +def iter_events(events): + for n, s in events.iteritems(): + for t in s: + yield (n, t) + + +def inprod(a, b): + return tuple(float(x * y) for x, y in zip(a, b)) + + +def ll(a): + lamb, alpha, mu = a + + r1 = sum(log(lamb + sum(alpha * w * mu * exp(-mu * (t1 - t2)) + for (n2, t2, w) in s)) + for ((n1, t1), s) in event_edges.iteritems()) + r2 = sum(sum(alpha * w * (1 - exp(-mu * (nodes[n2] - t1))) + for n2, w in edges[n1].iteritems() if nodes[n2] > t1) + for (n1, t1) in iter_events(events)) + r3 = lamb * sum(nodes.itervalues()) + return -(r1 - r2 - r3) + + +if __name__ == "__main__": + nodes, edges, events, event_edges = load(open("data.pickle", "rb")) + d = {} + for line in open("values.txt"): + v = map(float, line.strip().split()) + d[tuple(v[:3])] = v[3] + l = d.items() + l.sort(key=lambda x: x[1]) + for a, _ in l[:10]: + t = [1. / i for i in range(2, 6)] + [float(i) for i in range(1, 6)] + for b in product(t, repeat=3): + l, al, m = inprod(a, b) + if (l, al, m) in d: + continue + print l, al, m, ll((l, al, m)) |
