class_docstr: Boosting Online Learning Ensemble (BOLE).
  
  A modified version of Oza Online Boosting Algorithm [^1]. For each incoming observation, each
  model's `learn_one` method is called `k` times where `k` is sampled from a Poisson distribution
  of parameter lambda. The first model to be trained will be the one with worst
  `correct_weight / (correct_weight + wrong_weight)`. The worst model not yet trained will
  receive lambda values for training from the models that incorrectly classified an instance, and
  the best model's not yet trained will receive lambda values for training from the models that
  correctly classified an instance. For more details, see [^2].
  
  Parameters
  ----------
  model
      The classifier to boost.
  n_models
      The number of models in the ensemble.
  seed
      Random number generator seed for reproducibility.
  error_bound
      Error bound percentage for allowing models to vote.
  
  Examples
  --------
  
  >>> from river import datasets
  >>> from river import ensemble
  >>> from river import evaluate
  >>> from river import drift
  >>> from river import metrics
  >>> from river import tree
  
  >>> dataset = datasets.Elec2().take(3000)
  
  >>> model = ensemble.BOLEClassifier(
  ...     model=drift.DriftRetrainingClassifier(
  ...         model=tree.HoeffdingTreeClassifier(),
  ...         drift_detector=drift.binary.DDM()
  ...     ),
  ...     n_models=10,
  ...     seed=42
  ... )
  
  >>> metric = metrics.Accuracy()
  
  >>> evaluate.progressive_val_score(dataset, model, metric)
  Accuracy: 93.63%
  
  References
  ----------
  [^1]: [Oza, N.C., 2005, October. Online bagging and boosting. In 2005 IEEE international conference on systems, man and cybernetics (Vol. 3, pp. 2340-2345). Ieee.](https://ti.arc.nasa.gov/m/profile/oza/files/ozru01a.pdf)
  [^2]: R. S. M. d. Barros, S. Garrido T. de Carvalho Santos and P. M. Gonçalves Júnior, "A Boosting-like Online Learning Ensemble," 2016 International Joint Conference on Neural Networks (IJCNN), 2016, pp. 1871-1878, doi: 10.1109/IJCNN.2016.7727427.
class_docstr_tok: ["Boosting","Online","Learning","Ensemble","(","BOLE",")",".","A","modified","version","of","Oza","Online","Boosting","Algorithm","[","^1","]",".","For","each","incoming","observation",",","each","model","'s","`","learn_one","`","method","is","called","`","k","`","times","where","`","k","`","is","sampled","from","a","Poisson","distribution","of","parameter","lambda",".","The","first","model","to","be","trained","will","be","the","one","with","worst","`","correct_weight","\/","(","correct_weight","+","wrong_weight",")","`",".","The","worst","model","not","yet","trained","will","receive","lambda","values","for","training","from","the","models","that","incorrectly","classified","an","instance",",","and","the","best","model","'s","not","yet","trained","will","receive","lambda","values","for","training","from","the","models","that","correctly","classified","an","instance",".","For","more","details",",","see","[","^2","]",".","Parameters","--","--","--","--","--","model","The","classifier","to","boost",".","n_models","The","number","of","models","in","the","ensemble",".","seed","Random","number","generator","seed","for","reproducibility",".","error_bound","Error","bound","percentage","for","allowing","models","to","vote",".","Examples","--","--","--","--",">",">",">","from","river","import","datasets",">",">",">","from","river","import","ensemble",">",">",">","from","river","import","evaluate",">",">",">","from","river","import","drift",">",">",">","from","river","import","metrics",">",">",">","from","river","import","tree",">",">",">","dataset","=","datasets.Elec2","(",")",".take","(","3000",")",">",">",">","model","=","ensemble.BOLEClassifier","(","...","model=drift.DriftRetrainingClassifier","(","...","model=tree.HoeffdingTreeClassifier","(",")",",","...","drift_detector=drift.binary.DDM","(",")","...",")",",","...","n_models=10",",","...","seed=42","...",")",">",">",">","metric","=","metrics.Accuracy","(",")",">",">",">","evaluate.progressive_val_score","(","dataset",",","model",",","metric",")","Accuracy",":","93.63","%","References","--","--","--","--","--","[","^1","]",":","[","Oza",",","N.C.",",","2005",",","October",".","Online","bagging","and","boosting",".","In","2005","IEEE","international","conference","on","systems",",","man","and","cybernetics","(","Vol",".","3",",","pp",".","2340-2345",")",".","Ieee",".","]","(","https",":","\/\/ti.arc.nasa.gov\/m\/profile\/oza\/files\/ozru01a.pdf",")","[","^2","]",":","R.","S.","M.","d.","Barros",",","S.","Garrido","T.","de","Carvalho","Santos","and","P.","M.","Gon\u00e7alves","J\u00fanior",",","``","A","Boosting-like","Online","Learning","Ensemble",",","''","2016","International","Joint","Conference","on","Neural","Networks","(","IJCNN",")",",","2016",",","pp",".","1871-1878",",","doi",":","10.1109\/IJCNN.2016.7727427","."]
code: def __init__(
      self,
      model: base.Classifier,
      n_models=10,
      seed: int | None = None,
      error_bound=0.5,
  ):
      super().__init__(model=model, n_models=n_models, seed=seed)
      self.error_bound = error_bound
      self.order_position = [i for i in range(n_models)]
      self.instances_seen = 0
  
file_path: river/river/ensemble/boosting.py
imports: from __future__ import annotations
  import collections
  import math
  from river import base, drift, linear_model, utils
label_desc: Use image node_id 1 to create a new BOLEClassifier object from inherited base classes: AdaBoostClassifier with example: obj = BOLEClassifier(model, n_models, seed, error_bound)