Source code for utils.tracker.welford

from typing import Union

from ixai.utils.tracker.base import Tracker


[docs]class WelfordTracker(Tracker): """A Tracker that applies Welford's Algorithm to estimate the mean and variance of a sequence. Notes: Taken and adapted from Ian Covert's SAGE implementation. """ def __init__(self): super().__init__() self.sum_squares = 0
[docs] def update(self, value_i: Union[int, float]): """Adds one value to the Tracker. Args: value_i (int or float): The numeric value to be added to the tracker. """ self.N += 1 difference_1 = value_i - self.tracked_value self.tracked_value += difference_1 / self.N difference_2 = value_i - self.tracked_value self.sum_squares += difference_1 * difference_2 return self
@property def var(self): """Returns the variance of the stream.""" return self.sum_squares / max(self.N, 1) @property def std(self): """Returns the standard deviation of the stream.""" return self.var ** 0.5 @property def mean(self): """Returns the mean of the stream.""" return self.tracked_value