Mapeamento OneHotEncoding
Para discretizar recursos categóricos, estou usando um LabelEncoder e OneHotEncoder. Eu sei que o LabelEncoder mapeia os dados em ordem alfabética, mas como o OneHotEncoder mapeia os dados?
Eu tenho um dataframe de pandas,dataFeat
com 5 colunas diferentes e 4 rótulos possíveis, como acima.dataFeat = data[['Feat1', 'Feat2', 'Feat3', 'Feat4', 'Feat5']]
Feat1 Feat2 Feat3 Feat4 Feat5
A B A A A
B B C C C
D D A A B
C C A A A
Eu aplico umlabelencoder
como isso,
le = preprocessing.LabelEncoder()
intIndexed = dataFeat.apply(le.fit_transform)
É assim que os rótulos são codificados pelo LabelEncoder
Label LabelEncoded
A 0
B 1
C 2
D 3
Aplico então um OneHotEncoder como este
enc = OneHotEncoder(sparse = False)
encModel = enc.fit(intIndexed)
dataFeatY = encModel.transform(intIndexed)
intIndexed.shape = 94,5
edataFeatY.shape=94,20
.
Estou um pouco confuso com a forma dedataFeatY
- não deveria ser também 95,5?
Seguindo a resposta MhFarahani abaixo, eu fiz isso para ver como os rótulos são mapeados
import numpy as np
S = np.array(['A', 'B','C','D'])
le = LabelEncoder()
S = le.fit_transform(S)
print(S)
[0 1 2 3]
ohe = OneHotEncoder()
one_hot = ohe.fit_transform(S.reshape(-1,1)).toarray()
print(one_hot.T)
[[ 1. 0. 0. 0.]
[ 0. 1. 0. 0.]
[ 0. 0. 1. 0.]
[ 0. 0. 0. 1.]]
Isso significa que os rótulos são mapeados dessa maneira ou é diferente para cada coluna? (o que explicaria a forma sendo 94,20)
Label LabelEncoded OneHotEncoded
A 0 1. 0. 0. 0
B 1 0. 1. 0. 0.
C 2 0. 0. 1. 0.
D 3 0. 0. 0. 1.