He estado creando modelos con datos categóricos durante un tiempo y, en esta situación, básicamente uso la función LabelEncoder de scikit-learn para transformar estos datos antes de construir un modelo.
Entiendo la diferencia entre OHE
, LabelEncoder
y DictVectorizor
en términos de lo que están haciendo a los datos, pero lo que no está claro para mí es cuándo puede optar por emplear una técnica sobre otra.
¿Existen ciertos algoritmos o situaciones en los que uno tiene ventajas / desventajas con respecto a los demás?
Respuestas:
Hay algunos casos en los que LabelEncoder o DictVectorizor son útiles, pero estos son bastante limitados en mi opinión debido a la ordinalidad.
LabelEncoder puede convertir [perro, gato, perro, ratón, gato] en [1,2,1,3,2], pero la ordinalidad impuesta significa que el promedio de perro y ratón es gato. Todavía hay algoritmos como árboles de decisión y bosques aleatorios que pueden funcionar con variables categóricas muy bien y LabelEncoder se puede usar para almacenar valores usando menos espacio en disco.
One-Hot-Encoding tiene la ventaja de que el resultado es binario en lugar de ordinal y que todo se encuentra en un espacio vectorial ortogonal. La desventaja es que para una alta cardinalidad, el espacio de características realmente puede explotar rápidamente y comenzar a luchar con la maldición de la dimensionalidad. En estos casos, suelo emplear una codificación en caliente seguida de PCA para reducir la dimensionalidad. Me parece que la combinación juiciosa de one-hot plus PCA rara vez puede ser superada por otros esquemas de codificación. PCA encuentra la superposición lineal, por lo que naturalmente tenderá a agrupar características similares en la misma característica.
fuente
Si bien AN6U5 ha dado una muy buena respuesta, quería agregar algunos puntos para referencia futura. Al considerar One Hot Encoding (OHE) y Label Encoding , debemos tratar de comprender qué modelo está intentando construir. Es decir, las dos categorías de modelo que consideraremos son:
Consideremos cuándo aplicar OHE y cuándo aplicar Label Encoding al construir modelos basados en árboles.
Aplicamos OHE cuando:
Aplicamos la codificación de etiquetas cuando:
En caso de que desee continuar con OHE, como sugirió @ AN6U5, es posible que desee combinar PCA con OHE.
Consideremos cuándo aplicar OHE y Label Encoding al construir modelos no basados en árboles.
Para aplicar la codificación de etiquetas, la dependencia entre la función y el objetivo debe ser lineal para que la codificación de etiquetas se pueda utilizar de manera efectiva.
Del mismo modo, en caso de que la dependencia no sea lineal, es posible que desee utilizar OHE para lo mismo.
Nota: Parte de la explicación se ha mencionado en Cómo ganar una competencia de ciencia de datos de Coursera.
fuente
LabelEncoder es para datos ordinales, mientras que OHE es para datos nominales.
fuente