Source code for RADAR.base_algorithm_module

"""
    Base Module that performs the main operations needed to adapt every anomaly detection library

"""
from inspect import signature
from collections import defaultdict
from abc import ABC, abstractmethod

[docs] class BaseAnomalyDetection(ABC): """ Abstract Base class for every AD library to define the main behaviour of every library and specific algorithm Attributes ---------- decision_scores : numpy array of shape (n_samples,) The outlier scores of the training data The higher, the more abnormal. Outliers tend to have higher scores. This value is available once the detector is fitted. label_parser : function of shape (n_samples,) with the specific methods or operations to apply to the score values. """ @abstractmethod def __init__(self, **kwargs): self.label_parser = kwargs.get('label_parser', None)
[docs] @abstractmethod def fit(self, X, y=None): """Fit detector. y is ignored in unsupervised methods. Parameters ---------- X : numpy array of shape (n_samples, n_features) The input samples. y : Ignored Not used, present for API consistency by convention. Returns ------- self : object Fitted estimator. """ pass
[docs] @abstractmethod def decision_function(self, X): """Predict raw anomaly scores of X using the fitted detector. The anomaly score of an input sample is computed based on the fitted detector. For consistency, outliers are assigned with higher anomaly scores. Parameters ---------- X : numpy array of shape (n_samples, n_features) The input samples. Returns ------- anomaly_scores : numpy array of shape (n_samples,) The anomaly score of the input samples. """ pass
[docs] @abstractmethod def predict(self, X): """Predict if a particular sample is an outlier or not. Parameters ---------- X : numpy array of shape (n_samples, n_features) The input samples. Returns ------- outlier_labels : numpy array of shape (n_samples,) For each observation, tells whether it should be considered as an outlier according to the fitted model. 0 stands for inliers and 1 for outliers. """ pass
[docs] @abstractmethod def get_params(self): """Get parameters for this estimator. See http://scikit-learn.org/stable/modules/generated/sklearn.base.BaseEstimator.html and sklearn/base.py for more information. Parameters ---------- deep : bool, optional (default=True) If True, will return the parameters for this estimator and contained subobjects that are estimators. Returns ------- params : mapping of string to any Parameter names mapped to their values. """ out = dict() out['label_parser'] = self.label_parser return out
[docs] @abstractmethod def set_params(self, **params): """Set the parameters of this estimator. See http://scikit-learn.org/stable/modules/generated/sklearn.base.BaseEstimator.html and sklearn/base.py for more information. The method works on simple estimators as well as on nested objects (such as :class:`~sklearn.pipeline.Pipeline`). The latter have parameters of the form ``<component>__<parameter>`` so that it's possible to update each component of a nested object. Parameters ---------- **params : dict Estimator parameters. Returns ------- self : estimator instance Estimator instance. """ if not params: # Simple optimization to gain speed (inspect is slow) return self # valid_params = self.get_params() for key, value in params.items(): if key == "label_parser": setattr(self, key, value) return self