sets an object's paramters

        Parameters
        ----------
        deep : boolean, default: False
            when True, also sets non-user-facing paramters
        force : boolean, default: False
            when True, also sets parameters that the object does not already
            have
        **parameters : paramters to set

        Returns
        ------
        self

def set_params(self, deep=False, force=False, **parameters):
        """
        sets an object's paramters

        Parameters
        ----------
        deep : boolean, default: False
            when True, also sets non-user-facing paramters
        force : boolean, default: False
            when True, also sets parameters that the object does not already
            have
        **parameters : paramters to set

        Returns
        ------
        self
        """
        param_names = self.get_params(deep=deep).keys()
        for parameter, value in parameters.items():
            if (parameter in param_names
                or force
                or (hasattr(self, parameter) and parameter == parameter.strip('_'))):
                setattr(self, parameter, value)
        return self