code: def set_params(self, **params):
      """Set parameters (mimics sklearn API).
  
      Parameters
      ----------
      **params : dict
          Extra parameters.
  
      Returns
      -------
      inst : object
          The instance.
      """
      if not params:
          return self
      valid_params = self.get_params(deep=True)
      for key, value in params.items():
          split = key.split("__", 1)
          if len(split) > 1:
              # nested objects case
              name, sub_name = split
              if name not in valid_params:
                  raise ValueError(
                      f"Invalid parameter {name} for estimator {self}. Check the list"
                      " of available parameters with `estimator.get_params().keys()`."
                  )
              sub_object = valid_params[name]
              sub_object.set_params(**{sub_name: value})
          else:
              # simple objects case
              if key not in valid_params:
                  raise ValueError(
                      f"Invalid parameter {key} for estimator "
                      f"{self.__class__.__name__}. Check the list of available "
                      "parameters with `estimator.get_params().keys()`."
                  )
              setattr(self, key, value)
      return self
  
label_desc: Use image node_id 2 for calling the EstimatorMixin obj's underlying member method code with example usage: obj.set_params() and returns: self, self