Skip to content


One-class SVM for anomaly detection.

This is a stochastic implementation of the one-class SVM algorithm, and will not exactly match its batch formulation.

It is encouraged to scale the data upstream with preprocessing.StandardScaler, as well as use feature_extraction.RBFSampler to capture non-linearities.


  • nu – defaults to 0.1

    An upper bound on the fraction of training errors and a lower bound of the fraction of support vectors. You can think of it as the expected fraction of anomalies.

  • optimizer (optim.base.Optimizer) – defaults to None

    The sequential optimizer used for updating the weights.

  • intercept_lr (Union[optim.base.Scheduler, float]) – defaults to 0.01

    Learning rate scheduler used for updating the intercept. A optim.schedulers.Constant is used if a float is provided. The intercept is not updated when this is set to 0.

  • clip_gradient – defaults to 1000000000000.0

    Clips the absolute value of each gradient value.

  • initializer (optim.base.Initializer) – defaults to None

    Weights initialization scheme.


  • weights


>>> from river import anomaly
>>> from river import compose
>>> from river import datasets
>>> from river import metrics
>>> from river import preprocessing

>>> model = anomaly.QuantileFilter(
...     anomaly.OneClassSVM(nu=0.2),
...     q=0.995
... )

>>> auc = metrics.ROCAUC()

>>> for x, y in datasets.CreditCard().take(2500):
...     score = model.score_one(x)
...     is_anomaly = model.classify(score)
...     model = model.learn_one(x)
...     auc = auc.update(y, is_anomaly)

>>> auc
ROCAUC: 74.68%



Update the model.


  • x (dict)


AnomalyDetector: self


Return an outlier score.

A high score is indicative of an anomaly. A low score corresponds to a normal observation.


  • x


An anomaly score. A high score is indicative of an anomaly. A low score corresponds a