# `StochasticGradientTree`

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

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

Stochastic Gradient Tree classifier.

Stochastic Gradient Tree (SGT) <sup>[1](#f1)</sup> is an incremental decision tree that learns
using stochastic gradient information as its source of supervision, rather than
a heuristic such as information gain. Instead of using soft splits or rebuilding
a new tree for every update, as prior gradient-based tree learners did in the
batch setting, SGT accumulates per-node gradient and Hessian statistics online
and uses them to make hard splitting decisions incrementally. Because splitting
is driven only by the loss function’s gradients and Hessians, the same algorithm
can be applied to classification, regression, or multi-instance learning simply
by changing the loss function.

```pycon
>>> from capymoa.classifier import StochasticGradientTree
>>> from capymoa.datasets import ElectricityTiny
>>> from capymoa.evaluation import prequential_evaluation
>>>
>>> stream = ElectricityTiny()
>>> classifier = StochasticGradientTree(stream.get_schema())
>>> results = prequential_evaluation(stream, classifier, max_instances=1000)
>>> print(f"{results['cumulative'].accuracy():.1f}")
50.6
```

* <a id='f1'>**[1]**</a> Gouk, Henry, Bernhard Pfahringer, and Eibe Frank. “Stochastic Gradient Trees.” Proceedings of The 11th Asian Conference on Machine Learning (ACML 2019). PMLR 101, 2019, pp. 1094-1109.

#### \_\_init_\_(schema: [Schema](capymoa.stream.Schema.md#capymoa.stream.Schema), grace_period: [int](https://docs.python.org/3/builtins/functions.html#int) = 200, lambda_: [float](https://docs.python.org/3/builtins/functions.html#float) = 0.1, warm_start: [int](https://docs.python.org/3/builtins/functions.html#int) = 1000, confidence: [float](https://docs.python.org/3/builtins/functions.html#float) = 1e-06, split_test: [Literal](https://docs.python.org/3/library/typing.html#typing.Literal)['TTest'] = 'TTest', disable_resplits: [bool](https://docs.python.org/3/builtins/functions.html#bool) = False) → [None](https://docs.python.org/3/builtins/constants.html#None)[[source]](https://github.com/adaptive-machine-learning/CapyMOA/blob/3e255b1/src/capymoa/classifier/_sgt.py#L37)

Construct StochasticGradientTree classifier.

* **Parameters:**
  * **grace_period** – The number of instances a leaf should observe between
    split attempts.
  * **lambda** – Regularization parameter lambda.
  * **warm_start** – Number of instances to use for fitting the discretizers.
  * **confidence** – The level of confidence required that a split candidate is
    an improvement before the split is actually performed.
  * **split_test** – 

    Which type of hypothesis test to use for determining when
    to split.
    * `TTest`: Use a t-Test for checking statistical significance.
  * **disable_resplits** – Disable node resplitting.

#### 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.StochasticGradientTree.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.
