Fleet  0.0.9
Inference in the LOT
StreamingStatistics.h
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #include <mutex>
5 #include "MedianFAME.h"
6 
15 protected:
16  mutable std::mutex lock;
17 
18 public:
19 
20  double min;
21  double max;
22 
23  // for Welford's algorithm
24  double mean;
25  double M2;
26 
27  double N;
28 
30 
31  StreamingStatistics(size_t rs=100) :
32  min(infinity), max(-infinity), mean(0.0), M2(0.0), N(0) {
33  }
34 
36  std::lock_guard guard(s.lock); // acquire s's lock
37  std::lock_guard guard2(lock); // and my own
38  min = s.min;
39  max = s.max;
40  mean = s.mean;
41  M2 = s.M2;
42  N = s.N;
43  streaming_median = s.streaming_median;
44  }
45 
47  std::lock_guard guard(s.lock); // acquire s's lock
48  std::lock_guard guard2(lock); // and my own
49  min = s.min;
50  max = s.max;
51  mean = s.mean;
52  M2 = s.M2;
53  N = s.N;
54  streaming_median = s.streaming_median;
55  }
56 
57  void add(double x) {
63  ++N; // always count N, even if we get nan/inf (this is required for MCTS, otherwise we fall into sampling nans)
64 
65  // filter nans and inf(TODO: Should we filter inf?)
66  if(std::isnan(x) or std::isinf(x))
67  return;
68 
69  // get the lock
70  std::lock_guard guard(lock);
71 
72  streaming_median << x;
73 
74  max = std::max(max, x);
75  min = std::min(min, x);
76 
77  // now update -- Welford's algorithm
78 
79  double delta = x - mean;
80  mean += delta/N;
81 
82  double delta2 = x - mean;
83  M2 += delta*delta2;
84  }
85 
86  void operator<<(double x) {
91  add(x);
92  }
93 
94  double median() const {
99  return streaming_median.median();
100  }
101 
102  double get_sd() {
103  return sqrt(get_variance());
104  }
105 
106  double get_variance() {
107  if(N<2) return NaN;
108  else return M2/(N-1);
109  }
110 };
111 
112 
A streaming median class implementing the FAME algorithm Here, we initialize both the step size and M...
double median() const
Definition: StreamingStatistics.h:94
double max
Definition: StreamingStatistics.h:21
double get_variance()
Definition: StreamingStatistics.h:106
double mean
Definition: StreamingStatistics.h:24
void add(double x)
Definition: StreamingStatistics.h:57
std::mutex lock
Definition: StreamingStatistics.h:16
Definition: StreamingStatistics.h:14
MedianFAME< double > streaming_median
Definition: StreamingStatistics.h:29
T median() const
Definition: MedianFAME.h:26
constexpr double infinity
Definition: Numerics.h:20
double M2
Definition: StreamingStatistics.h:25
double get_sd()
Definition: StreamingStatistics.h:102
StreamingStatistics(size_t rs=100)
Definition: StreamingStatistics.h:31
void operator=(StreamingStatistics &&s)
Definition: StreamingStatistics.h:46
double N
Definition: StreamingStatistics.h:27
StreamingStatistics(const StreamingStatistics &s)
Definition: StreamingStatistics.h:35
double min
Definition: StreamingStatistics.h:20
constexpr double NaN
Definition: Numerics.h:21
void operator<<(double x)
Definition: StreamingStatistics.h:86