sktime.benchmarking.results 源代码

"""Benchmark results classes."""

__all__ = ["HDDResults", "RAMResults"]
__author__ = ["viktorkaz", "mloning"]

import os

import numpy as np
import pandas as pd

from sktime.benchmarking.base import BaseResults, HDDBaseResults, _PredictionsWrapper


[文档]class RAMResults(BaseResults): """In-memory results.""" def __init__(self): self.results = {} super().__init__()
[文档] def save_predictions( self, strategy_name, dataset_name, y_true, y_pred, y_proba, index, cv_fold, train_or_test, fit_estimator_start_time=None, fit_estimator_end_time=None, predict_estimator_start_time=None, predict_estimator_end_time=None, ): """Save the predictions of trained estimators. Parameters ---------- strategy_name : string Name of fitted strategy dataset_name: string Name of dataset on which the strategy is fitted y_true : numpy array array with true labels y_pred : numpy array array of predicted labels y_proba : numpy array array of probabilities associated with the predicted values index : numpy array dataset indices of the y_true data points fit_estimator_start_time : pandas timestamp (default=None) timestamp when fitting the estimator began fit_estimator_end_time : pandas timestamp (default=None) timestamp when fitting the estimator ended predict_estimator_begin_time : pandas timestamp (default=None) timestamp when the estimator began making predictions predict_estimator_end_time : pandas timestamp (default=None) timestamp when the estimator finished making predictions """ key = self._generate_key(strategy_name, dataset_name, cv_fold, train_or_test) index = np.asarray(index) y_true = np.asarray(y_true) y_pred = np.asarray(y_pred) y_proba = np.asarray(y_proba) self.results[key] = _PredictionsWrapper( strategy_name, dataset_name, index, y_true, y_pred, fit_estimator_start_time, fit_estimator_end_time, predict_estimator_start_time, predict_estimator_end_time, y_proba, ) self._append_key(strategy_name, dataset_name)
[文档] def load_predictions(self, cv_fold, train_or_test): """Load predictions for all datasets and strategies iteratively.""" for strategy_name, dataset_name in self._iter(): key = self._generate_key( strategy_name, dataset_name, cv_fold, train_or_test ) yield self.results[key]
[文档] def check_predictions_exist(self, strategy, dataset_name, cv_fold, train_or_test): """Check that predictions exist.""" # for in-memory results, always false, results are always overwritten return False
[文档] def save_fitted_strategy(self, strategy, dataset_name, cv_fold): """Save fitted strategy.""" raise NotImplementedError()
[文档] def load_fitted_strategy(self, strategy_name, dataset_name, cv_fold): """Load fitted strategy.""" raise NotImplementedError()
[文档] def check_fitted_strategy_exists(self, strategy, dataset_name, cv_fold): """Check that fitted strategy exists.""" # for in-memory results, always false, results are always overwritten return False
[文档] def save(self): """Save self. Method present for interface consistency. """
# in-memory results are currently not persisted (i.e saved to the disk) def _generate_key(self, strategy_name, dataset_name, cv_fold, train_or_test): """Get paths for files, encapsulates the storage logic of the class.""" return f"{strategy_name}_{dataset_name}_{train_or_test}_{str(cv_fold)}"
[文档]class HDDResults(HDDBaseResults): """HDD results."""
[文档] def save_predictions( self, strategy_name, dataset_name, y_true, y_pred, y_proba, index, cv_fold, train_or_test, fit_estimator_start_time=None, fit_estimator_end_time=None, predict_estimator_start_time=None, predict_estimator_end_time=None, ): """Save the predictions of trained estimators. Parameters ---------- strategy_name : string Name of fitted strategy dataset_name: string Name of dataset on which the strategy is fitted y_true : numpy array array with true labels y_pred : numpy array array of predicted labels y_proba : numpy array array of probabilities associated with the predicted values index : numpy array dataset indices of the y_true data points fit_estimator_start_time : pandas timestamp (default=None) timestamp when fitting the estimator began fit_estimator_end_time : pandas timestamp (default=None) timestamp when fitting the estimator ended predict_estimator_start_time : pandas timestamp (default=None) timestamp when the estimator began making predictions predict_estimator_end_time : pandas timestamp (default=None) timestamp when the estimator finished making predictions """ # TODO y_proba is currently ignored key = ( self._generate_key(strategy_name, dataset_name, cv_fold, train_or_test) + ".csv" ) # TODO find a more clever way to save the timestamps results = pd.DataFrame( { "index": index, "y_true": y_true, "y_pred": y_pred, "fit_estimator_start_time": fit_estimator_start_time, "fit_estimator_end_time": fit_estimator_end_time, "predict_estimator_start_time": predict_estimator_start_time, "predict_estimator_end_time": predict_estimator_end_time, } ) results.to_csv(key, index=False, header=True) self._append_key(strategy_name, dataset_name)
[文档] def load_predictions(self, cv_fold, train_or_test): """Load saved predictions.""" for strategy_name, dataset_name in self._iter(): key = ( self._generate_key( strategy_name, dataset_name, cv_fold, train_or_test=train_or_test ) + ".csv" ) results = pd.read_csv(key, header=0) index = results.loc[:, "index"].values y_true = results.loc[:, "y_true"].values y_pred = results.loc[:, "y_pred"].values fit_estimator_start_time = results.loc[0, "fit_estimator_start_time"] fit_estimator_end_time = results.loc[0, "fit_estimator_end_time"] predict_estimator_start_time = results.loc[ 0, "predict_estimator_start_time" ] predict_estimator_end_time = results.loc[0, "predict_estimator_end_time"] yield _PredictionsWrapper( strategy_name, dataset_name, index, y_true, y_pred, fit_estimator_start_time, fit_estimator_end_time, predict_estimator_start_time, predict_estimator_end_time, )
[文档] def save_fitted_strategy(self, strategy, dataset_name, cv_fold): """Save fitted strategy.""" path = ( self._generate_key( strategy.name, dataset_name, cv_fold, train_or_test="train" ) + ".pickle" ) strategy.save(path) self._append_key(strategy.name, dataset_name)
[文档] def load_fitted_strategy(self, strategy_name, dataset_name, cv_fold): """Load saved (fitted) strategy.""" from joblib import load for strategy_name, dataset_name in self._iter(): key = ( self._generate_key( strategy_name, dataset_name, cv_fold, train_or_test="train" ) + ".pickle" ) # TODO if we use strategy specific saving function, how do we # remember how to load them? check file endings? return load(key)
[文档] def check_fitted_strategy_exists(self, strategy_name, dataset_name, cv_fold): """Check that fitted strategy exists.""" path = ( self._generate_key( strategy_name, dataset_name, cv_fold, train_or_test="train" ) + ".pickle" ) if os.path.isfile(path): return True else: return False
[文档] def check_predictions_exist( self, strategy_name, dataset_name, cv_fold, train_or_test ): """Check that predictions exist.""" path = ( self._generate_key(strategy_name, dataset_name, cv_fold, train_or_test) + ".csv" ) if os.path.isfile(path): return True else: return False
def _generate_key(self, strategy_name, dataset_name, cv_fold, train_or_test): """Get paths for files, encapsulates the storage logic of the class.""" filepath = os.path.join(self.path, strategy_name, dataset_name) if not os.path.exists(filepath): # recursively create directory including intermediate-level folders os.makedirs(filepath) filename = f"{strategy_name}_{train_or_test}_{cv_fold}" return os.path.join(filepath, filename)