class_docstr: This is a Tree Parzen Estimator (TPE) algorithm as found in Hyperopt,
  that is better than the Random Search algorithm and supports supporting
  intelligent exploration v.s. exploitation of the search space over time,
  using Neuraxle hyperparameters.
  
  Here, the algorithm is modified compared to the original one, as it uses a
  :class:`neuraxle.metaopt.automl.GridExplorationSampler` instead of a random search
  to pick the first exploration samples to furthermore explore the space at the beginning.
docstr: Find the next best hyperparams using previous trials.
  
  :param round_scope: round scope
  :return: next best hyperparams
docstr_tok: ["Find","the","next","best","hyperparams","using","previous","trials",".",":","param","round_scope",":","round","scope",":","return",":","next","best","hyperparams"]
code: def find_next_best_hyperparams(
      self, _round: RoundReport, hp_space: HyperparameterSpace
  ) -> HyperparameterSamples:
      """
      Find the next best hyperparams using previous trials.
  
      :param round_scope: round scope
      :return: next best hyperparams
      """
  
      # Perform a first pseudo-randomized search:
      if len(_round) < self.number_of_initial_random_step:
          return self.initial_auto_ml_algo.find_next_best_hyperparams(
              _round, hp_space
          )
  
      # Create gaussian mixture of good and gaussian mixture of bads. Lists here are on a per-hp basis:
      (
          hyperparams_keys,
          divided_good_and_bad_distrs,
      ) = self.mixture_factory.create_from(_round, hp_space)
  
      # Sample the next hyperparams finally:
      return self._sample_next_hyperparams_from_gaussians_div(
          hyperparams_keys, divided_good_and_bad_distrs
      )
  
imports: from collections import Counter
  from operator import itemgetter
  from typing import Any, List, Tuple, Union
  import numpy
  from neuraxle.hyperparams.distributions import Choice, DiscreteHyperparameterDistribution, DistributionMixture, HPSampledValue, HyperparameterDistribution, LogSpaceDistributionMixin, PriorityChoice, Quantized
  from neuraxle.hyperparams.space import HyperparameterSamples, HyperparameterSpace
  from neuraxle.metaopt.data.reporting import RoundReport, TrialReport
  from neuraxle.metaopt.optimizer import BaseHyperparameterOptimizer, GridExplorationSampler
label_desc: Use image node_id 2 for calling the TreeParzenEstimator obj's underlying member method code with example usage: obj.find_next_best_hyperparams(_round, hp_space) and returns: self, self