def testMovingAverageSlidingWindowInit(self): """ Test the slidingWindow value is correctly assigned when initializing a new MovingAverage object. """ # With exisiting historical values; same values as tested in testMovingAverage() ma = MovingAverage(windowSize=3, existingHistoricalValues=[3.0, 4.0, 5.0]) self.assertListEqual(ma.getSlidingWindow(), [3.0, 4.0, 5.0]) # Withoout exisiting historical values ma = MovingAverage(windowSize=3) self.assertListEqual(ma.getSlidingWindow(), [])
def testEquals(self): ma = MovingAverage(windowSize=3) maP = MovingAverage(windowSize=3) self.assertEqual(ma, maP) maN = MovingAverage(windowSize=10) self.assertNotEqual(ma, maN) ma = MovingAverage(windowSize=2, existingHistoricalValues=[3.0, 4.0, 5.0]) maP = MovingAverage(windowSize=2, existingHistoricalValues=[3.0, 4.0, 5.0]) self.assertEqual(ma, maP) maP.next(6) self.assertNotEqual(ma, maP) ma.next(6) self.assertEqual(ma, maP)
def __init__(self, w, minval=None, maxval=None, periodic=False, n=0, radius=0, resolution=0, name=None, verbosity=0, clipInput=True, forced=False): """ [overrides nupic.encoders.scalar.ScalarEncoder.__init__] """ self._learningEnabled = True if periodic: #Adaptive scalar encoders take non-periodic inputs only raise Exception( 'Adaptive scalar encoder does not encode periodic inputs') assert n != 0 #An adaptive encoder can only be intialized using n super(AdaptiveScalarEncoder, self).__init__(w=w, n=n, minval=minval, maxval=maxval, clipInput=True, name=name, verbosity=verbosity, forced=forced) self.recordNum = 0 #how many inputs have been sent to the encoder? self.slidingWindow = MovingAverage(300)
def testMovingAverageInstance(self): """ Test that the (internal) moving average maintains the averages correctly, even for null initial condition and when the number of values goes over windowSize. Pass in integers and floats. this is for the instantce method next() """ ma = MovingAverage(windowSize=3) newAverage = ma.next(3) self.assertEqual(newAverage, 3.0) self.assertListEqual(ma.getSlidingWindow(), [3.0]) self.assertEqual(ma.total, 3.0) newAverage = ma.next(4) self.assertEqual(newAverage, 3.5) self.assertListEqual(ma.getSlidingWindow(), [3.0, 4.0]) self.assertEqual(ma.total, 7.0) newAverage = ma.next(5) self.assertEqual(newAverage, 4.0) self.assertListEqual(ma.getSlidingWindow(), [3.0, 4.0, 5.0]) self.assertEqual(ma.total, 12.0) # Ensure the first value gets popped newAverage = ma.next(6) self.assertEqual(newAverage, 5.0) self.assertListEqual(ma.getSlidingWindow(), [4.0, 5.0, 6.0]) self.assertEqual(ma.total, 15.0)
def __init__(self, slidingWindowSize=None, mode=MODE_PURE, binaryAnomalyThreshold=None): """ @param slidingWindowSize (optional) - how many elements are summed up; enables moving average on final anomaly score; int >= 0 @param mode (optional) - (string) how to compute anomaly; possible values are: - "pure" - the default, how much anomal the value is; float 0..1 where 1=totally unexpected - "likelihood" - uses the anomaly_likelihood code; models probability of receiving this value and anomalyScore - "weighted" - "pure" anomaly weighted by "likelihood" (anomaly * likelihood) @param binaryAnomalyThreshold (optional) - if set [0,1] anomaly score will be discretized to 1/0 (1 if >= binaryAnomalyThreshold) The transformation is applied after moving average is computed and updated. """ self._mode = mode if slidingWindowSize is not None: self._movingAverage = MovingAverage(windowSize=slidingWindowSize) else: self._movingAverage = None if self._mode == Anomaly.MODE_LIKELIHOOD or self._mode == Anomaly.MODE_WEIGHTED: self._likelihood = AnomalyLikelihood() # probabilistic anomaly if not self._mode in Anomaly._supportedModes: raise ValueError("Invalid anomaly mode; only supported modes are: " "Anomaly.MODE_PURE, Anomaly.MODE_LIKELIHOOD, " "Anomaly.MODE_WEIGHTED; you used: %r" % self._mode) self._binaryThreshold = binaryAnomalyThreshold if binaryAnomalyThreshold is not None and ( not isinstance(binaryAnomalyThreshold, float) or binaryAnomalyThreshold >= 1.0 or binaryAnomalyThreshold <= 0.0 ): raise ValueError("Anomaly: binaryAnomalyThreshold must be from (0,1) " "or None if disabled.")
def __init__(self, slidingWindowSize=None, mode=MODE_PURE, binaryAnomalyThreshold=None): self._mode = mode if slidingWindowSize is not None: self._movingAverage = MovingAverage(windowSize=slidingWindowSize) else: self._movingAverage = None if (self._mode == Anomaly.MODE_LIKELIHOOD or self._mode == Anomaly.MODE_WEIGHTED): self._likelihood = AnomalyLikelihood() # probabilistic anomaly else: self._likelihood = None if not self._mode in self._supportedModes: raise ValueError("Invalid anomaly mode; only supported modes are: " "Anomaly.MODE_PURE, Anomaly.MODE_LIKELIHOOD, " "Anomaly.MODE_WEIGHTED; you used: %r" % self._mode) self._binaryThreshold = binaryAnomalyThreshold if binaryAnomalyThreshold is not None and ( not isinstance(binaryAnomalyThreshold, float) or binaryAnomalyThreshold >= 1.0 or binaryAnomalyThreshold <= 0.0): raise ValueError( "Anomaly: binaryAnomalyThreshold must be from (0,1) " "or None if disabled.")
def __init__(self, slidingWindowSize = None, mode=MODE_PURE): """ @param slidingWindowSize (optional) - how many elements are summed up; enables moving average on final anomaly score; int >= 0 @param mode (optional) - (string) how to compute anomaly; possible values are: - "pure" - the default, how much anomal the value is; float 0..1 where 1=totally unexpected - "likelihood" - uses the anomaly_likelihood code; models probability of receiving this value and anomalyScore - "weighted" - "pure" anomaly weighted by "likelihood" (anomaly * likelihood) """ self._mode = mode if slidingWindowSize is not None: self._movingAverage = MovingAverage(windowSize=slidingWindowSize) else: self._movingAverage = None if self._mode == Anomaly.MODE_LIKELIHOOD or self._mode == Anomaly.MODE_WEIGHTED: self._likelihood = AnomalyLikelihood() # probabilistic anomaly if not self._mode in Anomaly._supportedModes: raise ValueError("Invalid anomaly mode; only supported modes are: " "Anomaly.MODE_PURE, Anomaly.MODE_LIKELIHOOD, " "Anomaly.MODE_WEIGHTED; you used: %r" % self._mode)
def testSerialization(self): """serialization using pickle""" ma = MovingAverage(windowSize=3) ma.next(3) ma.next(4) ma.next(5) stored = pickle.dumps(ma) restored = pickle.loads(stored) self.assertEqual(restored, ma) self.assertEqual(ma.next(6), restored.next(6))
def testMovingAverageReadWrite(self): ma = MovingAverage(windowSize=3) ma.next(3) ma.next(4) ma.next(5) proto1 = MovingAverageProto.new_message() ma.write(proto1) # Write the proto to a temp file and read it back into a new proto with tempfile.TemporaryFile() as f: proto1.write(f) f.seek(0) proto2 = MovingAverageProto.read(f) resurrectedMa = MovingAverage.read(proto2) newAverage = ma.next(6) self.assertEqual(newAverage, resurrectedMa.next(6)) self.assertListEqual(ma.getSlidingWindow(), resurrectedMa.getSlidingWindow()) self.assertEqual(ma.total, resurrectedMa.total)