LabelBinarizer de Scikit-learn contra OneHotEncoder

¿Cuál es la diferencia entre los dos? Parece que ambas crean nuevas columnas, cuyo número es igual al número de categorías únicas en la característica. Luego asignan 0 y 1 a los puntos de datos según la categoría en la que se encuentren.

A continuación se muestra un ejemplo simple que codifica una matriz usando LabelEncoder, OneHotEncoder, LabelBinarizer.

Veo que OneHotEncoder necesita los datos en forma de código entero primero para convertirlos en su encoding respectiva, lo que no es necesario en el caso 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) 

introduzca la descripción de la imagen aquí

Otro buen enlace que explica el OneHotEncoder es: Explica onehotencoder usando python

Puede haber otras diferencias válidas entre los dos que los expertos probablemente puedan explicar.

Una diferencia es que puede usar OneHotEncoder para datos de varias columnas, mientras que no es para LabelBinarizer y 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)