Estaba revisando la documentación oficial de scikit-learn learn después de leer un libro sobre ML y encontré lo siguiente:
En la Documentación se trata, sklearn.preprocessing.OrdinalEncoder()
mientras que en el libro se trata sklearn.preprocessing.LabelEncoder()
, cuando verifiqué su funcionalidad, me pareció lo mismo. ¿Puede alguien decirme la diferencia entre los dos por favor?
fuente
OrdinalEncoder
?LabelEncoder
no] está destinado a ser utilizado en funciones, solo en objetivos de aprendizaje supervisados".En cuanto a las diferencias
OrdinalEncoder
y laLabelEncoder
implementación , la respuesta aceptada menciona la forma de los datos: (OrdinalEncoder
para datos 2D; forma(n_samples, n_features)
,LabelEncoder
es para datos 1D: para forma(n_samples,)
)Es por eso
OrdinalEncoder
que a obtendría un error:... si intenta encajar en datos 1D:
OrdinalEncoder().fit(['a','b'])
Sin embargo, otra diferencia entre los codificadores es el nombre de su parámetro aprendido ;
LabelEncoder
aprendeclasses_
OrdinalEncoder
aprendecategories_
Observe las diferencias en el ajuste
LabelEncoder
vsOrdinalEncoder
, y las diferencias en los valores de estos parámetros aprendidos.LabelEncoder.classes_
es 1D, mientras queOrdinalEncoder.categories_
es 2D.Otros codificadores que funcionan en 2D, incluido
OneHotEncoder
, también usan la propiedadcategories_
Más información aquí sobre el dtype
<U1
(little-endian, Unicode, 1 byte; es decir, una cadena con longitud 1)EDITAR
En los comentarios a mi respuesta, Piotr no está de acuerdo ; Piotr señala la diferencia entre la codificación ordinal y la codificación de etiquetas de manera más general.
cold
,warm
,hot
);blonde
,brunette
)Este es un gran concepto, pero esta pregunta se refiere a las
sklearn
clases / implementación. Es interesante ver cómo la implementación no coincide con los conceptos; en especialOrdinalEncoder
; específicamente cómo debes hacer la codificación ordinal tú mismo .En cuanto a la aplicación parece que
LabelEncoder
yOrdinalEncoder
tienen un comportamiento coherente en cuanto a los números enteros elegidos . Ellos ambos números enteros asignar basados en orden alfabético . Por ejemplo:Observe cómo ambos codificadores asignaron enteros en orden alfabético 'c' <'h' <'w'.
Pero esta parte es importante: observe cómo ninguno de los codificadores obtuvo el orden "real" correcto (es decir, el orden real debe reflejar la temperatura, donde el orden es 'frío' <'cálido' <'caliente'); basado en el orden "real", al valor se
'warm'
le habría asignado el entero 1.En la publicación de blog a la que hace referencia Piotr , el autor ni siquiera lo usa
OrdinalEncoder()
. Para lograr la codificación ordinal, el autor lo hace manualmente: asigna cada temperatura a un entero de orden "real", usando un diccionario como{'cold':0, 'warm':1, 'hot':2}
:En otras palabras, si se pregunta si usarlo
OrdinalEncoder
, tenga en cuentaOrdinalEncoder
que en realidad no puede proporcionar la "codificación ordinal" de la manera que espera .fuente
Utiliza la codificación ordinal para preservar el orden de los datos categóricos, es decir, frío, cálido, caliente; bajo medio alto. Utiliza la codificación de etiquetas o un hot para datos categóricos, donde no hay orden en los datos, es decir, perro, gato, ballena. Mira esta publicación en medio. Explica bien estos conceptos.
fuente