def __init__( self, best_model, cv_results, cv_data, model_reprs, partition, X_train, y_train, frequency, horizon, country_code_column, ): self.best_model = best_model self.cv_results = cv_results self.cv_data = cv_data self.model_reprs = model_reprs self.partition = partition self.X_train = X_train self.y_train = y_train self.frequency = frequency self.horizon = horizon self.country_code_column = country_code_column self.best_model_hash = generate_estimator_hash(best_model) self.best_model_cv_data = self.cv_data.rename({self.best_model_hash: "best_model"}, axis=1)[ ["split", "y_true", "best_model"] ] self.best_model_name = get_estimator_name(best_model).replace("model__", "") self.best_model_cv_results = self.cv_results[self.cv_results["rank_test_score"] == 1].iloc[0] self.best_model_repr = self.model_reprs[self.best_model_hash] self.partition_hash = generate_partition_hash(self.partition) self._persist_attrs = sorted(set(self.__dict__.keys()).difference(["self"])) self._df_plot = None
def _score(self, method_caller, estimator, X, y_true, sample_weight=None): """Evaluate predicted target values for X relative to y_true. Parameters ---------- method_caller : callable Returns predictions given an estimator, method name, and other arguments, potentially caching results. estimator : object Trained estimator to use for scoring. Must have a predict_proba method; the output of that is used to compute the score. X : array-like or sparse matrix Test data that will be fed to estimator.predict. y_true : array-like Gold standard target values for X. sample_weight : array-like Sample weights. Returns ------- score : float Score function applied to prediction of estimator on X. """ y_pred = estimator.predict(X) estimator_repr = get_estimator_repr(estimator) estimator_hash = generate_estimator_hash(estimator) self._upsert_estimator_hash(estimator_repr, estimator_hash) self._save_prediction(y_pred=y_pred, estimator_label=estimator_hash, y_true=y_true) if y_pred.isna().any().any() or np.isinf(y_pred).any().any(): return np.nan else: if sample_weight is not None: return self._sign * self._score_func( y_true, y_pred, sample_weight=sample_weight, **self._kwargs) else: return self._sign * self._score_func(y_true, y_pred, ** self._kwargs)