Source code for autogluon.features.generators.label_encoder
import copy
import logging
from pandas import DataFrame
from autogluon.common.features.types import R_CATEGORY, S_TEXT_AS_CATEGORY
from .abstract import AbstractFeatureGenerator
logger = logging.getLogger(__name__)
# TODO: LabelEncoderTransformer
[docs]
class LabelEncoderFeatureGenerator(AbstractFeatureGenerator):
"""Converts category features to int features by mapping to the category codes."""
def _fit_transform(self, X: DataFrame, **kwargs) -> (DataFrame, dict):
X_out = self._transform(X)
feature_metadata_out_type_group_map_special = copy.deepcopy(self.feature_metadata_in.type_group_map_special)
if S_TEXT_AS_CATEGORY in feature_metadata_out_type_group_map_special:
feature_metadata_out_type_group_map_special.pop(S_TEXT_AS_CATEGORY)
return X_out, feature_metadata_out_type_group_map_special
def _transform(self, X: DataFrame) -> DataFrame:
return self.convert_category_to_int(X)
@staticmethod
def get_default_infer_features_in_args() -> dict:
return dict(valid_raw_types=[R_CATEGORY])
@staticmethod
def convert_category_to_int(X: DataFrame) -> DataFrame:
# TODO: add inplace option?
X = X.apply(lambda x: x.cat.codes)
return X
def _more_tags(self):
return {"feature_interactions": False}