class_docstr: Random sampling by mixing under-sampling and over-sampling.
  
  This is a wrapper for classifiers. It will train the provided classifier by both under-sampling
  and over-sampling the stream of given observations so that the class distribution seen by the
  classifier follows a given desired distribution.
  
  See [Working with imbalanced data](/user-guide/imbalanced-learning) for example usage.
  
  Parameters
  ----------
  classifier
  desired_dist
      The desired class distribution. The keys are the classes whilst the values are the desired
      class percentages. The values must sum up to 1. If set to `None`, then the observations
      will be sampled uniformly at random, which is stricly equivalent to using
      `ensemble.BaggingClassifier`.
  sampling_rate
      The desired ratio of data to sample.
  seed
      Random seed for reproducibility.
  
  Examples
  --------
  
  >>> from river import datasets
  >>> from river import evaluate
  >>> from river import imblearn
  >>> from river import linear_model
  >>> from river import metrics
  >>> from river import preprocessing
  
  >>> model = imblearn.RandomSampler(
  ...     (
  ...         preprocessing.StandardScaler() |
  ...         linear_model.LogisticRegression()
  ...     ),
  ...     desired_dist={False: 0.4, True: 0.6},
  ...     sampling_rate=0.8,
  ...     seed=42
  ... )
  
  >>> dataset = datasets.CreditCard().take(3000)
  
  >>> metric = metrics.LogLoss()
  
  >>> evaluate.progressive_val_score(dataset, model, metric)
  LogLoss: 0.09...
code: def learn_one(self, x, y, **kwargs):
      self._actual_dist[y] += 1
      self._n += 1
      f = self.desired_dist
      g = self._actual_dist
  
      rate = self.sampling_rate * f[y] / (g[y] / self._n)
  
      for _ in range(utils.random.poisson(rate, rng=self._rng)):
          self.classifier.learn_one(x, y, **kwargs)
  
imports: from __future__ import annotations
  import collections
  import random
  import typing
  from river import base, utils
label_desc: Use image node_id 2 for calling the RandomSampler obj's underlying member method code with example usage: obj.learn_one(x, y) without return types