# `HoeffdingAdaptiveTree`

### *class* capymoa.classifier.HoeffdingAdaptiveTree[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/classifier/_hoeffding_adaptive_tree.py#L16)

Bases: [`HoeffdingTree`](capymoa.classifier.HoeffdingTree.md#capymoa.classifier.HoeffdingTree)

Hoeffding Adaptive Tree (HAT).

HAT <sup>[1](#bifet2009)</sup> uses [`ADWIN`](capymoa.drift.detectors.ADWIN.md#capymoa.drift.detectors.ADWIN) to track the
performance of its tree branches allowing it to adapt to concept drift.

```pycon
>>> from capymoa.datasets import ElectricityTiny
>>> from capymoa.classifier import HoeffdingAdaptiveTree
>>> from capymoa.evaluation import prequential_evaluation
>>> stream = ElectricityTiny()
>>> schema = stream.get_schema()
>>> learner = HoeffdingAdaptiveTree(schema)
>>> results = prequential_evaluation(stream, learner, max_instances=1000)
>>> results["cumulative"].accuracy()
84.1
```

* <a id='bifet2009'>**[1]**</a> Bifet, A. and Gavalda, R., 2009. Adaptive learning from evolving data streams. In Advances in Intelligent Data Analysis VIII: 8th International Symposium on Intelligent Data Analysis, IDA 2009, Lyon, France, August 31-September 2, 2009. Proceedings 8 (pp. 249-260). Springer Berlin Heidelberg. [https://link.springer.com/chapter/10.1007/978-3-642-03915-7_22](https://link.springer.com/chapter/10.1007/978-3-642-03915-7_22)

#### \_\_init_\_(schema: [Schema](capymoa.stream.Schema.md#capymoa.stream.Schema), random_seed: [int](https://docs.python.org/3/builtins/functions.html#int) = 0, grace_period: [int](https://docs.python.org/3/builtins/functions.html#int) = 200, split_criterion: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [SplitCriterion](capymoa.core.moa.splitcriteria.SplitCriterion.md#capymoa.core.moa.splitcriteria.SplitCriterion) = 'InfoGainSplitCriterion', confidence: [float](https://docs.python.org/3/builtins/functions.html#float) = 1e-3, tie_threshold: [float](https://docs.python.org/3/builtins/functions.html#float) = 0.05, leaf_prediction: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [int](https://docs.python.org/3/builtins/functions.html#int) = 'NaiveBayesAdaptive', nb_threshold: [int](https://docs.python.org/3/builtins/functions.html#int) = 0, numeric_attribute_observer: [str](https://docs.python.org/3/builtins/stdtypes.html#str) = 'GaussianNumericAttributeClassObserver', binary_split: [bool](https://docs.python.org/3/builtins/functions.html#bool) = False, max_byte_size: [float](https://docs.python.org/3/builtins/functions.html#float) = 33554433, memory_estimate_period: [int](https://docs.python.org/3/builtins/functions.html#int) = 1000000, stop_mem_management: [bool](https://docs.python.org/3/builtins/functions.html#bool) = True, remove_poor_attrs: [bool](https://docs.python.org/3/builtins/functions.html#bool) = False, disable_prepruning: [bool](https://docs.python.org/3/builtins/functions.html#bool) = True)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/classifier/_hoeffding_adaptive_tree.py#L40)

Hoeffding Adaptive Tree (HAT) classifier.

* **Parameters:**
  * **schema** – the schema of the stream.
  * **random_seed** – the random seed passed to the moa learner.
  * **grace_period** – the number of instances a leaf should observe between split attempts.
  * **split_criterion** – the split criterion to use. Defaults to InfoGainSplitCriterion.
  * **confidence** – the confidence level to calculate the Hoeffding Bound (1 - delta).
    Defaults to 1e-3. Values closer to zero imply longer split decision delays.
  * **tie_threshold** – the threshold below which a split will be forced to break ties.
  * **leaf_prediction** – the Prediction mechanism used at leafs.</br>
    - 0 - Majority Class</br>
    - 1 - Naive Bayes</br>
    - 2 - Naive Bayes Adaptive</br>
  * **nb_threshold** – the number of instances a leaf should observe before allowing Naive Bayes.
  * **numeric_attribute_observer** – the Splitter or Attribute Observer (AO) used to
    monitor the class statistics of numeric features and perform splits.
  * **binary_split** – If True, only allow binary splits.
  * **max_byte_size** – the max size of the tree, in bytes.
  * **memory_estimate_period** – Interval (number of processed instances) between memory consumption checks.
  * **stop_mem_management** – If True, stop growing as soon as memory limit is hit.
  * **remove_poor_attrs** – If True, disable poor attributes to reduce memory usage.
  * **disable_prepruning** – If True, disable merit-based tree pre-pruning.

#### cli_help()[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/base/_classifier.py#L111)

#### *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/base/_classifier.py#L56)

Predict the label of an instance.

The base implementation calls [`predict_proba()`](#capymoa.classifier.HoeffdingAdaptiveTree.predict_proba) and returns the
label with the highest probability.

* **Parameters:**
  **instance** – The instance to predict the label for.
* **Returns:**
  The predicted label or `None` if the classifier is unable
  to make a prediction.

#### predict_proba(instance) → [ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray)[[tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[Any](https://docs.python.org/3/library/typing.html#typing.Any), ...], [dtype](https://numpy.org/doc/stable/reference/generated/numpy.dtype.html#numpy.dtype)[float64]] | [None](https://docs.python.org/3/builtins/constants.html#None)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/base/_classifier.py#L117)

Return probability estimates for each label.

* **Parameters:**
  **instance** – The instance to estimate the probabilities for.
* **Returns:**
  An array of probabilities for each label or `None` if the
  classifier is unable to make a prediction.

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

Train the classifier with a labeled instance.

* **Parameters:**
  **instance** – The labeled instance to train the classifier with.

#### random_seed *: [int](https://docs.python.org/3/builtins/functions.html#int)*

The random seed for reproducibility.

When implementing a classifier ensure random number generators are seeded.

#### schema *: [Schema](capymoa.stream.Schema.md#capymoa.stream.Schema)*

The schema representing the instances.
