docstr: Execute all tasks that must take place before the experiment is actually started. Such
  tasks include (but are not limited to): Creating experiment IDs and hyperparameter keys,
  creating script backups, and validating parameters
docstr_tok: ["Execute","all","tasks","that","must","take","place","before","the","experiment","is","actually","started",".","Such","tasks","include","(","but","are","not","limited","to",")",":","Creating","experiment","IDs","and","hyperparameter","keys",",","creating","script","backups",",","and","validating","parameters"]
code: def preparation_workflow(self):
      """Execute all tasks that must take place before the experiment is actually started. Such
      tasks include (but are not limited to): Creating experiment IDs and hyperparameter keys,
      creating script backups, and validating parameters"""
      G.debug("Starting preparation_workflow...")
      self._generate_experiment_id()
      self._create_script_backup()
      self._validate_parameters()
      self._generate_hyperparameter_key()
      self._additional_preparation_steps()
      G.debug("Completed preparation_workflow")
  
imports: from hyperparameter_hunter.algorithm_handlers import identify_algorithm, identify_algorithm_hyperparameters
  from hyperparameter_hunter.data import TrainDataset, OOFDataset, HoldoutDataset, TestDataset
  from hyperparameter_hunter.experiment_core import ExperimentMeta
  from hyperparameter_hunter.feature_engineering import FeatureEngineer
  from hyperparameter_hunter.i_o.exceptions import EnvironmentInactiveError, EnvironmentInvalidError, RepeatedExperimentError
  from hyperparameter_hunter.i_o.recorders import RecorderList
  from hyperparameter_hunter.keys.makers import HyperparameterKeyMaker
  from hyperparameter_hunter.metrics import ScoringMixIn, get_formatted_target_metric
  from hyperparameter_hunter.models import model_selector
  from hyperparameter_hunter.settings import G
  from hyperparameter_hunter.utils.file_utils import RetryMakeDirs
  from abc import abstractmethod
  from copy import deepcopy
  from inspect import isclass
  import numpy
  import pandas
  import random
  import shutil
  from sys import exc_info
  from uuid import uuid4
  import warnings
  import sklearn.utils
label_desc: Use image node_id 5 for calling the BaseExperiment obj's underlying member method code with example usage: obj.preparation_workflow() without return types