Source code for pyreal.transformers.feature_select

from collections.abc import Sequence

import numpy as np
import pandas as pd

from pyreal.transformers import BreakingTransformError, TransformerBase


[docs]class FeatureSelectTransformer(TransformerBase): """ A transformer that selects and re-orders features to match the model's inputs """
[docs] def __init__(self, columns, **kwargs): """ Initializes the transformer Args: columns (dataframe column label type or list of dataframe column label type): Label of column to select, or an ordered list of column labels to select """ if columns is not None and not isinstance(columns, (list, tuple, np.ndarray, pd.Index)): columns = [columns] self.columns = columns self.column_order = None self.dropped_columns = [] super().__init__(**kwargs)
def fit(self, x, **params): """ Saves the columns being dropped Args: x (DataFrame of shape (n_instances, n_features)): The dataset to fit on Returns: None """ self.dropped_columns = list(set(x.columns) - set(self.columns)) self.column_order = x.columns return super().fit(x) def data_transform(self, x): """ Reorders and selects the features in x Args: x (DataFrame of shape (n_instances, n_features)): The data to transform Returns: DataFrame of shape (n_instances, len(columns)): The data with features selected and reordered """ return x[self.columns] def inverse_transform_explanation_feature_based(self, explanation): """ Sets the contribution of dropped features to 0 Args: explanation (FeatureBased): The explanation to be transformed Returns: FeatureBased: The transformed explanation """ explanation_df = explanation.get() for col in self.dropped_columns: explanation_df[col] = 0 return explanation.update_explanation(explanation_df[self.column_order]) def transform_explanation_feature_based(self, explanation): """ Selects the desired columns Args: explanation (FeatureBased): The explanation to be transformed Returns: FeatureBased: The transformed explanation """ return explanation.update_explanation(explanation.get()[self.columns]) def transform_explanation_decision_tree(self, explanation): """ Features cannot be removed from existing decision trees, so raise a BreakingTransformError Args: explanation (DecisionTree): The explanation to be transformed Raises: BreakingTransformError """ raise BreakingTransformError
[docs]class ColumnDropTransformer(TransformerBase): """ A transformer that drops a set of columns from the data """
[docs] def __init__(self, columns, **kwargs): """ Initializes the transformer Args: columns (dataframe column label type or list of dataframe column label type): Label of column to select, or an ordered list of column labels to select """ if columns is not None and not isinstance(columns, Sequence): columns = [columns] self.dropped_columns = columns self.column_order = None super().__init__(**kwargs)
def data_transform(self, x): """ Reorders and selects the features in x Args: x (DataFrame of shape (n_instances, n_features)): The data to transform Returns: DataFrame of shape (n_instances, len(columns)): The data with features selected and reordered """ self.column_order = x.columns return x.drop(self.dropped_columns, axis=1) def inverse_transform_explanation_feature_based(self, explanation): """ Sets the contribution of dropped features to 0 Args: explanation (FeatureBased): The explanation to be transformed Returns: FeatureBased: The transformed explanation """ explanation_df = explanation.get() for col in self.dropped_columns: explanation_df[col] = 0 return explanation.update_explanation(explanation_df[self.column_order]) def transform_explanation_feature_based(self, explanation): """ Drops columns from an explanation Args: explanation (FeatureBased): The explanation to be transformed Returns: FeatureBased: The transformed explanation """ return explanation.update_explanation(explanation.get().drop(self.dropped_columns, axis=1)) def transform_explanation_decision_tree(self, explanation): """ Features cannot be removed from existing decision trees, so raise a BreakingTransformError Args: explanation (DecisionTree): The explanation to be transformed Raises: BreakingTransformError """ raise BreakingTransformError