web-dev-qa-db-fra.com

LabelBinarizer vs OneHotEncoder de Scikit-learn

Quelle est la différence entre les deux? Il semble que les deux créent de nouvelles colonnes, dont le nombre est égal au nombre de catégories uniques dans l'entité. Ensuite, ils attribuent 0 et 1 aux points de données en fonction de la catégorie dans laquelle ils se trouvent.

18
Roozbeh Bakhshi

Un exemple simple qui code un tableau à l'aide de LabelEncoder, OneHotEncoder, LabelBinarizer est présenté ci-dessous.

Je vois que OneHotEncoder a d’abord besoin de données sous forme codée d’entier pour être converties en son codage respectif, ce qui n’est pas nécessaire en cas de LabelBinarizer.

from numpy import array
from numpy import argmax
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
# define example
data = ['cold', 'cold', 'warm', 'cold', 'hot', 'hot', 'warm', 'cold', 
'warm', 'hot']
values = array(data)
print "Data: ", values
# integer encode
label_encoder = LabelEncoder()
integer_encoded = label_encoder.fit_transform(values)
print "Label Encoder:" ,integer_encoded

# onehot encode
onehot_encoder = OneHotEncoder(sparse=False)
integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
print "OneHot Encoder:", onehot_encoded

#Binary encode
lb = LabelBinarizer()
print "Label Binarizer:", lb.fit_transform(values)

enter image description here

Un autre bon lien qui explique le OneHotEncoder est: Expliquez onehotencoder en utilisant python

Il peut y avoir d'autres différences valables entre les deux que les experts peuvent probablement expliquer.

18
Rahul Pant

Une différence est que vous pouvez utiliser OneHotEncoder pour les données multi-colonnes, mais pas pour LabelBinarizer et LabelEncoder.

from sklearn.preprocessing import LabelBinarizer, LabelEncoder, OneHotEncoder

X = [["US", "M"], ["UK", "M"], ["FR", "F"]]
OneHotEncoder().fit_transform(X).toarray()

# array([[0., 0., 1., 0., 1.],
#        [0., 1., 0., 0., 1.],
#        [1., 0., 0., 1., 0.]])
LabelBinarizer().fit_transform(X)
# ValueError: Multioutput target data is not supported with label binarization

LabelEncoder().fit_transform(X)
# ValueError: bad input shape (3, 2)
5
Kota Mori