Source code for simpleml.pipelines.ordered_dict.external_pipeline

"""
External pipeline support for native python pipeline
"""

[docs]__author__ = "Elisha Yadgaran"
from collections import OrderedDict from typing import Any, Dict, List, Optional, Tuple from simpleml.pipelines.external_pipelines import ExternalPipelineMixin
[docs]class OrderedDictExternalPipeline(OrderedDict, ExternalPipelineMixin): """ Use default dictionary behavior but add wrapper methods for extended functionality """
[docs] def add_transformer(self, name: str, transformer: Any) -> None: """ Setter method for new transformer step """ self[name] = transformer
[docs] def remove_transformer(self, name: str) -> None: """ Delete method for transformer step """ del self[name]
[docs] def fit(self, X: Any, y: Optional[Any] = None, **kwargs): """ Iterate through each transformation step and apply fit """ for step, transformer in self.items(): X = transformer.fit_transform(X, y=y, **kwargs) return self
[docs] def transform(self, X: Any, **kwargs) -> Any: """ Iterate through each transformation step and apply transform """ for step, transformer in self.items(): X = transformer.transform(X, **kwargs) return X
[docs] def fit_transform(self, X: Any, y: Optional[Any] = None, **kwargs) -> Any: """ Iterate through each transformation step and apply fit and transform """ for step, transformer in self.items(): X = transformer.fit_transform(X, y=y, **kwargs) return X
[docs] def get_params( self, params_only: Optional[bool] = None, **kwargs ) -> Dict[str, Any]: """ Iterate through transformers and return parameters :param params_only: Unused parameter to align signature with Sklearn version """ params = {} for step, transformer in self.items(): params[step] = transformer.get_params(**kwargs) return params
[docs] def set_params(self, **params) -> None: """ Set params for transformers. Input is expected to be dict of dict :param params: dictionary of dictionaries. each dictionary must map to a transformer step """ for step, param in params.items(): self[step].set_params(**param)
[docs] def get_transformers(self) -> List[Tuple[str, str]]: """ Get list of (step, transformer) tuples """ return [(i, j.__class__.__name__) for i, j in self.items()]
[docs] def get_feature_names(self, feature_names: List[str]) -> List[str]: """ Iterate through each transformer and return list of resulting features starts with empty list by default but can pass in dataset as starting point to guide transformations :param feature_names: list of initial feature names before transformations :type: list """ for step, transformer in self.items(): feature_names = transformer.get_feature_names(feature_names) return feature_names