from .rfe import RFETransformation from .pca import PCATransformation from .sklearn import SKLearnTransformation from typing import Literal, Optional from models.model_map import default_feature_selector_classification from sklearn.preprocessing import MinMaxScaler, Normalizer, StandardScaler, RobustScaler ScalerTypes = Literal["normalize", "minmax", "standardize", "robust"] def get_rfe(n_feature_to_select: int) -> Optional[RFETransformation]: if n_feature_to_select > 0: return RFETransformation( n_feature_to_select=n_feature_to_select, model=default_feature_selector_classification, ) else: return None def get_pca( ratio_components_to_keep: float, initial_window_size: int ) -> Optional[PCATransformation]: if ratio_components_to_keep > 0: return PCATransformation( ratio_components_to_keep=ratio_components_to_keep, initial_window_size=initial_window_size, ) else: return None def get_scaler(type: ScalerTypes) -> SKLearnTransformation: if type == "normalize": return SKLearnTransformation(Normalizer()) elif type == "minmax": return SKLearnTransformation(MinMaxScaler(feature_range=(-1, 1))) elif type == "standardize": return SKLearnTransformation(StandardScaler()) elif type == "robust": return SKLearnTransformation( RobustScaler(with_centering=False, quantile_range=(0.10, 0.90)) ) else: raise Exception("Scaler type not supported")