# `AdaptiveIsolationForest`

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

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

Adaptive Isolation Forest for anomaly detection.

This implementation adapts the Isolation Forest algorithm to be more adaptive
in changing environments. It uses a sliding window approach and can replace
trees based on their quality scores, combining tree size and maximum mass
metrics to determine which trees to keep.

References:

Liu, J.J., Cassales, G.W., Liu, F.T., Pfahringer, B., Bifet, A. (2025).
Adaptive Isolation Forest. In: Džeroski, S., Levatić, J., Pio, G.,
Simidjievski, N. (eds) Discovery Science. DS 2025. Lecture Notes in
Computer Science(), vol 16090. Springer, Cham.
[https://doi.org/10.1007/978-3-032-05461-6_24](https://doi.org/10.1007/978-3-032-05461-6_24)

Example:

```pycon
>>> from capymoa.anomaly.datasets import TinyBlobs
>>> from capymoa.anomaly import AdaptiveIsolationForest
>>> from capymoa.evaluation import AnomalyDetectionEvaluator
>>> stream = TinyBlobs()
>>> schema = stream.get_schema()
>>> learner = AdaptiveIsolationForest(schema, window_size=256, n_trees=100)
>>> 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.96
```

#### \_\_init_\_(schema: [Schema](capymoa.stream.Schema.md#capymoa.stream.Schema), window_size=256, n_trees=100, height=None, seed: [int](https://docs.python.org/3/builtins/functions.html#int) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, m_trees=10, weights=0.5)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/anomaly/_adaptive_isolation_forest.py#L255)

Construct an Adaptive Isolation Forest anomaly detector.

* **Parameters:**
  * **schema** – The schema of the stream.
  * **window_size** – Size of the sliding window for training trees.
  * **n_trees** – Number of trees in the ensemble.
  * **height** – Maximum height of trees. If None, calculated as ceil(log2(window_size)).
  * **seed** – Random seed for reproducibility.
  * **m_trees** – Number of candidate trees to generate when replacing.
  * **weights** – Weight for combining tree size and max mass scores (0-1).
  * **skip_default_strategy** – If True, skip default replacement when quality score doesn’t improve.

#### *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) → [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/_adaptive_isolation_forest.py#L393)

Predict is not implemented for anomaly detection.

* **Parameters:**
  **instance** – The instance to predict.
* **Raises:**
  [**NotImplementedError**](https://docs.python.org/3/builtins/exceptions.html#NotImplementedError) – This method is not applicable for anomaly detection.

#### 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/_adaptive_isolation_forest.py#L371)

Calculate the anomaly score for an instance.

A high score is indicative of an anomaly.

* **Parameters:**
  **instance** – The instance to score (must be a LabeledInstance).
* **Returns:**
  The anomaly score between 0 and 1.

#### train(instance)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/anomaly/_adaptive_isolation_forest.py#L317)

Train the model on a single instance.

* **Parameters:**
  **instance** – The instance to train on.
