code: def set_categorical_feature(self, categorical_feature):
          
          if self.categorical_feature == categorical_feature:
              return self
          if self.data is not None:
              if self.categorical_feature is None:
                  self.categorical_feature = categorical_feature
                  return self._free_handle()
              elif categorical_feature == 'auto':
                  warnings.warn('Using categorical_feature in Dataset.')
                  return self
              else:
                  warnings.warn('categorical_feature in Dataset is overridden.\n'
                                'New categorical_feature is {}'.format(sorted(list(categorical_feature))))
                  self.categorical_feature = categorical_feature
                  return self._free_handle()
          else:
              raise LightGBMError("Cannot set categorical feature after freed raw data, "
                                  "set free_raw_data=False when construct Dataset to avoid this.")
docs: Set categorical features.
  
          Parameters
          ----------
          categorical_feature : list of int or strings
              Names or indices of categorical features.
  
          Returns
          -------
          self : Dataset
              Dataset with set categorical features.