OneHotEncoding Mapping
Para discretizar características categóricas, estoy usando un LabelEncoder y OneHotEncoder. Sé que LabelEncoder asigna datos alfabéticamente, pero ¿cómo OneHotEncoder asigna datos?
Tengo un marco de datos de pandas,dataFeat
con 5 columnas diferentes y 4 etiquetas posibles, como las anteriores.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
Aplico unlabelencoder
Me gusta esto,
le = preprocessing.LabelEncoder()
intIndexed = dataFeat.apply(le.fit_transform)
Así es como LabelEncoder codifica las etiquetas
Label LabelEncoded
A 0
B 1
C 2
D 3
Luego aplico un OneHotEncoder como este
enc = OneHotEncoder(sparse = False)
encModel = enc.fit(intIndexed)
dataFeatY = encModel.transform(intIndexed)
intIndexed.shape = 94,5
ydataFeatY.shape=94,20
.
Estoy un poco confundido con la forma dedataFeatY
- ¿No debería ser también 95,5?
Siguiendo la respuesta de MhFarahani a continuación, hice esto para ver cómo se asignan las etiquetas
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.]]
¿Esto significa que las etiquetas se asignan de esta manera, o es diferente para cada columna? (lo que explicaría que la forma sea 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.