CircularBinarySegmentation
Circular binary segmentation for multiple segment anomaly detection.
Quickstart
from sktime.detection.circular_binseg import CircularBinarySegmentation
estimator = CircularBinarySegmentation(anomaly_score=None, penalty=None, min_segment_length=5, max_interval_length=1000, growth_factor=1.5)Parameters(5)
- anomaly_scoreBaseIntervalScorer, optional, default=L2Cost()
The local anomaly score to use for anomaly detection. If a cost is given, it is converted to a local anomaly score using the
LocalAnomalyScoreclass.- penaltynp.ndarray or float, optional, default=None
The penalty to use for anomaly detection. If the anomaly score is penalised (
anomaly_score.get_tag("is_penalised")) the penalty will be ignored. The different types of penalties are:float: A constant penalty applied to the sum of scores across all variables in the data.np.ndarray: A penalty array of the same length as the number of columns in the data, where elementiof the array is the penalty fori+1variables being affected by an anomaly. The penalty array must be positive and increasing (not strictly). A penalised score with a linear penalty array is faster to evaluate than a nonlinear penalty array.None: A default penalty is created inpredictbased on the fitted score using themake_bic_penaltyfunction.
- min_segment_lengthint, default=5
- Minimum length between two changepoints. Must be greater than or equal to 1.
- max_interval_lengthint, default=1000
The maximum length of an interval to estimate a changepoint in. Must be greater than or equal to
2 * min_segment_length.- growth_factorfloat, default=1.5
The growth factor for the seeded intervals. Intervals grow in size according to
interval_len = max(interval_len + 1, floor(growth_factor * interval_len)), starting atinterval_len = min_interval_length. It also governs the amount of overlap between intervals of the same length, as the start of each interval is shifted by a factor of1 + 1 / growth_factor. Must be a float in(1, 2].
Examples
>>> from sktime.detection.circular_binseg import CircularBinarySegmentation
>>> import numpy as np, pandas as pd
>>> rng = np. random. default_rng (42)
>>> X = pd. DataFrame (rng. standard_normal ((75, 1)))
>>> X. iloc [20: 30 ] += 10.0
>>> X. iloc [50: 55 ] += 20.0
>>> detector = CircularBinarySegmentation (penalty = 20.0)
>>> detector. fit_predict (X)References
- [1 ] Olshen, A. B., Venkatraman, E. S., Lucito, R., & Wigler, M. (2004). Circular binary segmentation for the analysis of array-based DNA copy number data. Biostatistics, 5(4), 557-572.