code: def estimate(self, X, **params):
          
          # set params
          if params:
              self.set_params(**params)
          self._model = self._estimate(X)
          # ensure _estimate returned something
          assert self._model is not None
          self._estimated = True
          return self
docs: Estimates the model given the data X
  
          Parameters
          ----------
          X : object
              A reference to the data from which the model will be estimated
          params : dict
              New estimation parameter values. The parameters must that have been
              announced in the __init__ method of this estimator. The present
              settings will overwrite the settings of parameters given in the
              __init__ method, i.e. the parameter values after this call will be
              those that have been used for this estimation. Use this option if
              only one or a few parameters change with respect to
              the __init__ settings for this run, and if you don't need to
              remember the original settings of these changed parameters.
  
          Returns
          -------
          estimator : object
              The estimated estimator with the model being available.