2
respostas

Como reverter OneHotEncoder e LabelEncoder?

Eu verifiquei que OneHotEncoder não tem um método inverse_transform() . Como obter de volta os valores revertendo a transformação?

Por exemplo:

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer


base = pd.read_csv(caminho + "risco_credito.csv")

previsores = base.loc[:,["historia","divida","garantias","renda"]].values

classe = base.loc[:,"risco"].values


labelencorder_classe = LabelEncoder()
classe_enc = labelencorder_classe.fit_transform(classe)


onehotencorder = ColumnTransformer(transformers=[("OneHot", OneHotEncoder(), [0,1,2,3])],remainder='passthrough')

previsores_enc = onehotencorder.fit_transform(previsores)

Dados classe_enc e previsores_enc, como fazer a transformação inversa, ou seja, obter de volta os valores revertendo a transformação?

2 respostas

Olá, Edson.

Eu até ia sugerir que você usasse um argmax e depois usasse a lista de classes pra fazer a transformação inversa, mas vi na documentação das classes usadas (aqui e aqui), que tanto a classe LabelEncoder quanto a classe OneHotEncoder permitem a inversão da transformação através do método inverse_transform em ambas. Tente usar isso

y_by_position = onehotencorder.inverse_transform(previsores_enc)
y_by_label = labelencorder_classe.inverse_transform(y_by_position)

Não consegui testar no momento, mas segundo a documentação, deve resolver.

Espero ter ajudado.

@Madson Luiz Dantas Dias

Eu tentei usar inverse_transform no meu exemplo específico mas tive o erro:

 ColumnTransformer has not inverse_transform

Não sei porque aconteceu isso.

PS: Todas as bibliotecas estão atualizadas... Python 3.7