Source code for lore_sa.encoder_decoder.tabular_encoder

from lore_sa.encoder_decoder import EncDec, LabelEnc, OneHotEnc
from lore_sa.logger import logger
import numpy as np

__all__ = ["EncDec", "TabularEnc","LabelEnc"]
[docs]class TabularEnc(EncDec): """ It combines different encoders/decoders over a table dataset """
[docs] def __init__(self,descriptor: dict, target_class: str = None): super().__init__(descriptor) self.target_class = target_class self.type='tabular'
[docs] def encode(self, x: np.array): """ Combine one-hot encoding, as first, and label encoding to provide a table encoded. :param [Numpy array] x: Array to encode :return [Numpy array]: Encoded array """ self.one_hot_enc = OneHotEnc(self.dataset_descriptor) one_hot_encoded = self.one_hot_enc.encode(x) self.encoded_features.update(self.one_hot_enc.get_encoded_features()) self.label_enc = LabelEnc(self.one_hot_enc.encoded_descriptor) label_encoded = self.label_enc.encode(one_hot_encoded) self.encoded_features.update(self.label_enc.get_encoded_features()) self.encoded_descriptor = self.label_enc.encoded_descriptor return np.array([int(n) for n in label_encoded])
[docs] def get_encoded_features(self): if self.encoded_features is None: raise Exception("You have not run the encoder yet") else: return self.encoded_features
[docs] def decode(self, x: np.array): """ Decode the instance applyng the onehot and label decode methods :param x: :return: """ label_enc = LabelEnc(self.dataset_descriptor) one_hot_enc = OneHotEnc(self.dataset_descriptor) one_hot_decoded = one_hot_enc.decode(x) label_decoded = label_enc.decode(one_hot_decoded) return label_decoded
[docs] def decode_target_class(self, x: np.array): """ Provides the value of the target class only. :param x: :return: """ label_dec = LabelEnc({'target':self.dataset_descriptor['target']}) label_decoded = label_dec.decode_target_class(x) return label_decoded