OneClassSVM¶
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.
Parameters¶
-
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 afloat
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.
Attributes¶
- weights
Examples¶
>>> 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%
You can also use the evaluate.progressive_val_score
function to evaluate the model on a
data stream.
>>> from river import evaluate
>>> model = model.clone()
>>>
>>> evaluate.progressive_val_score(
... dataset=datasets.CreditCard().take(2500),
... model=model,
... metric=metrics.ROCAUC(),
... print_every=1000
... )
[1,000] ROCAUC: 74.40%
[2,000] ROCAUC: 74.60%
[2,500] ROCAUC: 74.68%
ROCAUC: 74.68%
Methods¶
learn_many
learn_one
Update the model.
Parameters
- x (dict)
Returns
AnomalyDetector: self
score_one
Return an outlier score.
A high score is indicative of an anomaly. A low score corresponds to a normal observation.
Parameters
- x
Returns
An anomaly score. A high score is indicative of an anomaly. A low score corresponds a