OneHotEncoding Mapping
Для дискретизации категориальных функций я использую LabelEncoder и OneHotEncoder. Я знаю, что LabelEncoder отображает данные в алфавитном порядке, но как OneHotEncoder отображает данные?
У меня есть датафрейм для панд,dataFeat
с 5 различными столбцами и 4 возможными метками, как указано выше.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
Я применяюlabelencoder
как это,
le = preprocessing.LabelEncoder()
intIndexed = dataFeat.apply(le.fit_transform)
Вот как метки кодируются с помощью LabelEncoder
Label LabelEncoded
A 0
B 1
C 2
D 3
Затем я применяю OneHotEncoder, как это
enc = OneHotEncoder(sparse = False)
encModel = enc.fit(intIndexed)
dataFeatY = encModel.transform(intIndexed)
intIndexed.shape = 94,5
а такжеdataFeatY.shape=94,20
.
Я немного запутался с формойdataFeatY
- не должно ли это быть 95,5?
Следуя ответу MhFarahani ниже, я сделал это, чтобы увидеть, как отображаются метки
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.]]
Означает ли это, что метки отображаются так, или они различны для каждого столбца? (что объясняет форму 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.