class_docstr: !
  @brief Provides services for preparing initial means and covariances for Expectation-Maximization algorithm.
  @details Initialization strategy is defined by enumerator 'ema_init_type': random initialization and 
            kmeans with kmeans++ initialization. Here an example of initialization using kmeans strategy:
  
  @code
      from pyclustering.utils import read_sample
      from pyclustering.samples.definitions import FAMOUS_SAMPLES
      from pyclustering.cluster.ema import ema_initializer
  
      sample = read_sample(FAMOUS_SAMPLES.SAMPLE_OLD_FAITHFUL)
      amount_clusters = 2
  
      initial_means, initial_covariance = ema_initializer(sample, amount_clusters).initialize()
      print(initial_means)
      print(initial_covariance)
  @endcode
code: def __initialize_random(self):
      initial_means = []
  
      for _ in range(self.__amount):
          mean = self.__sample[
              random.randint(0, len(self.__sample)) - 1
          ]
          attempts = 0
          while (mean in initial_means) and (
              attempts < ema_initializer.__MAX_GENERATION_ATTEMPTS
          ):
              mean = self.__sample[
                  random.randint(0, len(self.__sample)) - 1
              ]
              attempts += 1
  
          if attempts == ema_initializer.__MAX_GENERATION_ATTEMPTS:
              mean = [
                  value + (random.random() - 0.5) * value * 0.2
                  for value in mean
              ]
  
          initial_means.append(mean)
  
      initial_clusters = self.__calculate_initial_clusters(
          initial_means
      )
      initial_covariance = self.__calculate_initial_covariances(
          initial_clusters
      )
  
      return initial_means, initial_covariance
  
imports: import numpy
  import random
  from pyclustering.cluster import cluster_visualizer
  from pyclustering.cluster.center_initializer import kmeans_plusplus_initializer
  from pyclustering.cluster.kmeans import kmeans
  from pyclustering.utils import pi, calculate_ellipse_description, euclidean_distance_square
  from enum import IntEnum
  import matplotlib.pyplot
  import matplotlib.animation
  from matplotlib import patches
label_desc: Use image node_id 5 for calling the ema_initializer obj's underlying member method code with example usage: obj.__initialize_random() and returns: initial_means,  initial_covariance