code: def construct(
      problem_type: str,
      y: Union[Series, np.ndarray, list, DataFrame],
      y_uncleaned: Union[Series, np.ndarray, list, DataFrame] = None,
      positive_class=None,
  ):
      if problem_type == SOFTCLASS:
          return LabelCleanerSoftclass(y)
      y = LabelCleaner._convert_to_valid_series(y)
      if y_uncleaned is not None:
          y_uncleaned = LabelCleaner._convert_to_valid_series(
              y_uncleaned
          )
  
      if problem_type == BINARY:
          return LabelCleanerBinary(y, positive_class=positive_class)
      elif problem_type == MULTICLASS:
          if y_uncleaned is None:
              y_uncleaned = copy.deepcopy(y)
          if len(y.unique()) == 2:
              return LabelCleanerMulticlassToBinary(y, y_uncleaned)
          else:
              return LabelCleanerMulticlass(y, y_uncleaned)
      elif problem_type in [REGRESSION, QUANTILE]:
          return LabelCleanerDummy(problem_type=problem_type)
      else:
          raise NotImplementedError
  
imports: import copy
  import logging
  from typing import Union
  import numpy
  from pandas import DataFrame, Series
  from autogluon.core.constants import BINARY, MULTICLASS, QUANTILE, REGRESSION, SOFTCLASS
  from autogluon.core.utils import get_pred_from_proba, get_pred_from_proba_df
label_desc: Use image node_id 2 for calling the LabelCleaner obj's underlying member method code with example usage: obj.construct(problem_type, y, y_uncleaned, positive_class) and returns: LabelCleanerSoftclass, LabelCleanerBinary, LabelCleanerMulticlassToBinary, LabelCleanerMulticlass, LabelCleanerDummy