Source code for modeva.models.wrappers.scored

import numpy as np
import pandas as pd
from sklearn.base import RegressorMixin, ClassifierMixin

from ..base import ModelBaseRegressor, ModelBaseClassifier


[docs] class MoScoredRegressor(RegressorMixin, ModelBaseRegressor): """ A wrapper for a scored regression model that provides predictions without holding the model object itself. Parameters ---------- dataset : object The dataset to be used for predictions. prediction_name : str The prediction column name in dataset. If None, will use the prediction_proba_name attribute in dataset. name : str, default=None The name of the model. """ def __init__(self, dataset, prediction_name: str = None, name: str = None, ): self.name = name self.dataset = dataset if prediction_name is not None: self.prediction_name = prediction_name elif dataset.prediction_name is not None: self.prediction_name = dataset.prediction_name else: raise ValueError("prediction_name is not specified and dataset also does not set prediction_name") self.is_fitted_ = True def _predict(self, X): """ Predicts the target values for the given input data X. Parameters ---------- X : array-like Input data for which predictions are to be made. Returns ------- array-like Predicted values corresponding to the input data. Raises ------ ValueError If predictions for the given input data are not available. """ for name in self.dataset.get_data_list(): XX = self.dataset.get_X_y_data(dataset=name)[0] if pd.DataFrame(X).equals(pd.DataFrame(XX)): data = self.dataset.get_data(dataset=name, active_sample=True, active_feature=False) feature_idx = self.dataset.all_feature_names.index(self.prediction_name) pred = data[:, feature_idx] return pred else: raise ValueError("Prediction for this X not available.")
[docs] class MoScoredClassifier(ClassifierMixin, ModelBaseClassifier): """ A wrapper for a scored classification model that provides predictions and probability estimates without holding the model object itself. Parameters ---------- dataset : object The dataset to be used for predictions. prediction_proba_name : str, default=None The prediction_proba column name in dataset. If None, will use the prediction_proba_name attribute in dataset. name : str, default=None The name of the model. """ def __init__(self, dataset, prediction_proba_name: str = None, name: str = None, ): self.name = name self.dataset = dataset if prediction_proba_name is not None: self.prediction_proba_name = prediction_proba_name elif dataset.prediction_proba_name is not None: self.prediction_proba_name = dataset.prediction_proba_name else: raise ValueError( "prediction_proba_name is not specified and dataset also does not set prediction_proba_name") self.is_fitted_ = True self.classes_ = [0, 1] def _predict_proba(self, X): """ Predicts the class probabilities for the given input data X. Parameters ---------- X : array-like Input data for which probabilities are to be predicted. Returns ------- array-like Predicted class probabilities corresponding to the input data. Raises ------ ValueError If probability predictions for the given input data are not available. """ for name in self.dataset.get_data_list(): XX = self.dataset.get_X_y_data(dataset=name)[0] if pd.DataFrame(X).equals(pd.DataFrame(XX)): data = self.dataset.get_data(dataset=name, active_sample=True, active_feature=False) feature_idx = self.dataset.all_feature_names.index(self.prediction_proba_name) proba = data[:, [feature_idx]] return np.hstack([1 - proba, proba]) else: continue else: raise ValueError("Prediction proba for this X not available.")