class_docstr: Base class providing API and common functions for all multi-label
  classifiers.
  
  Implements base functionality for ML classifiers, especially the get/set params for
  scikit-learn compatibility.
  
  Attributes
  ----------
  copyable_attrs : List[str]
      list of attribute names that should be copied when class is cloned
docstr: Propagate parameters to sub-objects
  
  Set parameters as returned by :code:`get_params`. Please
  see this `link`_.
  
  .. _link: https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/base.py#L243
docstr_tok: ["Propagate","parameters","to","sub-objects","Set","parameters","as","returned","by",":","code",":","`","get_params","`",".","Please","see","this","`","link","`","_",".","..","_link",":","https",":","\/\/github.com\/scikit-learn\/scikit-learn\/blob\/master\/sklearn\/base.py","#","L243"]
code: def set_params(self, **parameters):
      """Propagate parameters to sub-objects
  
      Set parameters as returned by :code:`get_params`. Please
      see this `link`_.
  
      .. _link: https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/base.py#L243
      """
  
      if not parameters:
          return self
  
      valid_params = self.get_params(deep=True)
  
      parameters_current_level = [
          x for x in parameters if "__" not in x
      ]
      for parameter in parameters_current_level:
          value = parameters[parameter]
  
          if parameter in valid_params:
              setattr(self, parameter, value)
          else:
              raise ValueError(
                  "Invalid parameter %s for estimator %s. "
                  "Check the list of available parameters "
                  "with `estimator.get_params().keys()`."
                  % (parameter, self)
              )
  
      parameters_below_current_level = [
          x for x in parameters if "__" in x
      ]
      parameters_grouped_by_current_level = {
          object: {} for object in valid_params
      }
  
      for parameter in parameters_below_current_level:
          object_name, sub_param = parameter.split("__", 1)
  
          if object_name not in parameters_grouped_by_current_level:
              raise ValueError(
                  "Invalid parameter %s for estimator %s. "
                  "Check the list of available parameters "
                  "with `estimator.get_params().keys()`."
                  % (object_name, self)
              )
  
          value = parameters[parameter]
          parameters_grouped_by_current_level[object_name][
              sub_param
          ] = value
  
      valid_params = self.get_params(deep=True)
  
      # parameters_grouped_by_current_level groups valid parameters for subojects
      for (
          object_name,
          sub_params,
      ) in parameters_grouped_by_current_level.items():
          if len(sub_params) > 0:
              sub_object = valid_params[object_name]
              sub_object.set_params(**sub_params)
  
      return self
  
file_path: scikit-multilearn/skmultilearn/base/base.py
imports: import numpy
  from ..utils import get_matrix_in_format, matrix_creation_function_for_format
  from scipy.sparse import issparse
  from sklearn.base import BaseEstimator, ClassifierMixin
label_desc: Use image node_id 8 for calling the MLClassifierBase obj's underlying member method code with example usage: obj.set_params() and returns: self, self