OneHotEncoding Mapping
Um kategoriale Features zu diskretisieren, verwende ich einen LabelEncoder und einen OneHotEncoder. Ich weiß, dass LabelEncoder Daten alphabetisch ordnet, aber wie ordnet OneHotEncoder Daten zu?
Ich habe einen Pandas-Datenrahmen,dataFeat
mit 5 verschiedenen Spalten und 4 möglichen Bezeichnungen, wie oben.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
Ich bewerbe mich um einlabelencoder
so was
le = preprocessing.LabelEncoder()
intIndexed = dataFeat.apply(le.fit_transform)
So werden die Labels vom LabelEncoder codiert
Label LabelEncoded
A 0
B 1
C 2
D 3
Ich wende dann einen OneHotEncoder wie diesen an
enc = OneHotEncoder(sparse = False)
encModel = enc.fit(intIndexed)
dataFeatY = encModel.transform(intIndexed)
intIndexed.shape = 94,5
unddataFeatY.shape=94,20
.
Ich bin ein bisschen verwirrt mit der Form vondataFeatY
- sollte es nicht auch 95,5 sein?
Nach der folgenden Antwort von MhFarahani habe ich dies getan, um zu sehen, wie Labels zugeordnet werden
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.]]
Bedeutet dies, dass Beschriftungen wie folgt zugeordnet sind, oder ist dies für jede Spalte unterschiedlich? (was erklären würde, dass die Form 94,20 ist)
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.