class_docstr: Mondrian Tree classifier.
  
  Parameters
  ----------
  step
      Step of the tree.
  use_aggregation
      Whether to use aggregation weighting techniques or not.
  dirichlet
      Dirichlet parameter of the problem.
  split_pure
      Whether the tree should split pure leafs during training or not.
  iteration
      Number iterations to do during training.
  seed
      Random seed for reproducibility.
  
  Notes
  -----
  The Mondrian Tree Classifier is a type of decision tree that bases splitting decisions over a
  Mondrian process.
  
  Examples
  --------
  >>> from river import datasets
  >>> from river import evaluate
  >>> from river import metrics
  >>> from river import tree
  
  >>> dataset = datasets.Bananas().take(500)
  
  >>> model = tree.mondrian.MondrianTreeClassifier(
  ...     step=0.1,
  ...     use_aggregation=True,
  ...     dirichlet=0.2,
  ...     seed=1
  ... )
  
  >>> metric = metrics.Accuracy()
  
  >>> evaluate.progressive_val_score(dataset, model, metric)
  Accuracy: 58.52%
  
  References
  ----------
  [^1]: Balaji Lakshminarayanan, Daniel M. Roy, Yee Whye Teh. Mondrian Forests: Efficient Online Random Forests.
      arXiv:1406.2673, pages 2-4
code: def __init__(
      self,
      step: float = 0.1,
      use_aggregation: bool = True,
      dirichlet: float = 0.5,
      split_pure: bool = False,
      iteration: int = 0,
      seed: int | None = None,
  ):
      super().__init__(
          step=step,
          loss="log",
          use_aggregation=use_aggregation,
          iteration=iteration,
          seed=seed,
      )
  
      self.dirichlet = dirichlet
      self.split_pure = split_pure
  
      # Training attributes
      # The previously observed classes set
      self._classes: set[base.typing.ClfTarget] = set()
  
      # The current sample being proceeded
      self._x: dict[base.typing.FeatureName, int | float]
      # The current label index being proceeded
      self._y: base.typing.ClfTarget
  
      # Initialization of the root of the tree
      # It's the root so it doesn't have any parent (hence None)
      self._root = MondrianLeafClassifier(None, 0.0, 0)
  
imports: from __future__ import annotations
  import math
  from river import base, utils
  from river.tree.mondrian.mondrian_tree import MondrianTree
  from river.tree.mondrian.mondrian_tree_nodes import MondrianBranchClassifier, MondrianLeafClassifier, MondrianNodeClassifier
label_desc: Use image node_id 1 to create a new MondrianTreeClassifier object from inherited base classes: MondrianTree, base with example: obj = MondrianTreeClassifier(step, use_aggregation, dirichlet, split_pure, iteration, seed)