# `RSHash`

### *class* capymoa.anomaly.RSHash[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/anomaly/_rs_hash.py#L101)

Bases: [`AnomalyDetector`](capymoa.base.AnomalyDetector.md#capymoa.base.AnomalyDetector)

RS-Hash: subspace outlier detection in linear time with randomized hashing.

The paper describes two streaming variants (Section III): a sliding window and
time-decayed scores. This module implements the sliding window, which the paper
notes is straightforward because the count-min sketch supports both insertion
and deletion.

Reference:
Sathe, S. and Aggarwal, C. C. (2016). Subspace Outlier Detection in Linear
Time with Randomized Hashing. IEEE ICDM, pp. 459-468.

Example:
>>> from capymoa.anomaly.datasets import TinyBlobs
>>> from capymoa.anomaly import RSHash
>>> from capymoa.evaluation import AnomalyDetectionEvaluator
>>> stream = TinyBlobs()
>>> schema = stream.get_schema()
>>> learner = RSHash(schema, s=256)
>>> evaluator = AnomalyDetectionEvaluator(schema)
>>> while stream.has_more_instances():
…     instance = stream.next_instance()
…     proba = learner.score_instance(instance)
…     evaluator.update(instance.y_index, proba)
…     learner.train(instance)
>>> auc = evaluator.auc()
>>> print(f”AUC: {auc:.2f}”)
AUC: 0.78

#### \_\_init_\_(schema: [Schema](capymoa.stream.Schema.md#capymoa.stream.Schema), m: [int](https://docs.python.org/3/builtins/functions.html#int) = 300, s: [int](https://docs.python.org/3/builtins/functions.html#int) = 1000, w: [int](https://docs.python.org/3/builtins/functions.html#int) = 4, p: [int](https://docs.python.org/3/builtins/functions.html#int) = 10_000, seed: [int](https://docs.python.org/3/builtins/functions.html#int) = 42)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/anomaly/_rs_hash.py#L131)

Construct an RS-Hash anomaly detector.

* **Parameters:**
  * **schema** – Schema of the stream.
  * **m** – Number of ensemble components.
  * **s** – Sliding window length.
  * **w** – Number of hash tables per component.
  * **p** – Hash range per component.
  * **seed** – Random seed.

#### *classmethod* from_params(schema: [Any](https://docs.python.org/3/library/typing.html#typing.Any) = None, params: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None, random_seed: [int](https://docs.python.org/3/builtins/functions.html#int) = 1) → [Any](https://docs.python.org/3/library/typing.html#typing.Any)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/base/_learner_params.py#L170)

Construct an instance from parameters produced by `get_params`.

#### get_params() → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)][[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/base/_learner_params.py#L163)

Return the hyper-parameters captured from the constructor.

#### predict(instance: [Instance](capymoa.core.Instance.md#capymoa.core.Instance)) → [int](https://docs.python.org/3/builtins/functions.html#int) | [None](https://docs.python.org/3/builtins/constants.html#None)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/anomaly/_rs_hash.py#L214)

#### score_instance(instance: [Instance](capymoa.core.Instance.md#capymoa.core.Instance)) → [float](https://docs.python.org/3/builtins/functions.html#float)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/anomaly/_rs_hash.py#L219)

Return the anomaly score for the given instance.

Higher values indicate more anomalous instances.

RS-Hash reports a normality score, so this method multiplies the
ensemble average by -1 to stay consistent with the other detectors.
Instances arriving before the window has filled score 0.0.

* **Parameters:**
  **instance** – The instance to score.
* **Returns:**
  The anomaly score.

#### train(instance: [Instance](capymoa.core.Instance.md#capymoa.core.Instance)) → [None](https://docs.python.org/3/builtins/constants.html#None)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/anomaly/_rs_hash.py#L202)
