from abc import abstractmethod import pandas as pd from evalml.exceptions import MethodPropertyNotFoundError from evalml.pipelines.components import ComponentBase [docs]class Estimator(ComponentBase): """A component that fits and predicts given data. To implement a new Transformer, define your own class which is a subclass of Transformer, including a name and a list of acceptable ranges for any parameters to be tuned during the automl search (hyperparameters). Define an `__init__` method which sets up any necessary state and objects. Make sure your `__init__` only uses standard keyword arguments and calls `super().__init__()` with a parameters dict. You may also override the `fit`, `transform`, `fit_transform` and other methods in this class if appropriate. To see some examples, check out the definitions of any Estimator component. """ @property @classmethod @abstractmethod def supported_problem_types(cls): """Problem types this estimator supports""" [docs] def predict(self, X): """Make predictions using selected features. Args: X (pd.DataFrame): features Returns: pd.Series: estimated labels """ try: predictions = self._component_obj.predict(X) except AttributeError: raise MethodPropertyNotFoundError("Estimator requires a predict method or a component_obj that implements predict") if not isinstance(predictions, pd.Series): predictions = pd.Series(predictions) return predictions [docs] def predict_proba(self, X): """Make probability estimates for labels. Args: X (pd.DataFrame): features Returns: pd.DataFrame: probability estimates """ try: pred_proba = self._component_obj.predict_proba(X) except AttributeError: raise MethodPropertyNotFoundError("Estimator requires a predict_proba method or a component_obj that implements predict_proba") if not isinstance(pred_proba, pd.DataFrame): pred_proba = pd.DataFrame(pred_proba) return pred_proba @property def feature_importance(self): """Returns importance associated with each feature. Returns: list(float): importance associated with each feature """ try: return self._component_obj.feature_importances_ except AttributeError: raise MethodPropertyNotFoundError("Estimator requires a feature_importance property or a component_obj that implements feature_importances_")