Pregunta

He sido la creación de modelos con datos categóricos por un tiempo y ahora cuando en esta situación yo, básicamente, el valor predeterminado mediante scikit-learn LabelEncoder función de transformar los datos antes de la construcción de 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 me queda claro es cuando usted puede decidir emplear una técnica sobre otra.

Hay ciertos algoritmos o situaciones en las que uno tiene ventajas y desventajas con respecto a los otros?

¿Fue útil?

Solución

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 luego la ordinalidad impuesta significa que el promedio de perro y ratón es el gato. Aún así, hay algoritmos como árboles de decisión y bosques aleatorios que pueden funcionar con variables categóricas muy bien y LabelEncoder puede usarse para almacenar valores utilizando menos espacio en disco.

El codificación de un solo estado tiene la ventaja de que el resultado es binario más que 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 comienzas a luchar con la maldición de la dimensionalidad. En estos casos, normalmente empleo un codificación de un punto hecho seguido de PCA para la reducción de dimensionalidad. Encuentro que la combinación juiciosa de One-Hot más PCA rara vez puede ser vencido 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.

Otros consejos

Mientras AN6U5 ha dado una muy buena respuesta, quería añadir un par de puntos de referencia para el futuro.Cuando se considera Caliente Una Codificación(OHE) y Etiqueta De Codificación, debemos intentar entender cuál es el modelo que usted está tratando de construir.Es decir, las dos categorías de modelo estaremos considerando son:

  1. Árbol Basado En Modelos:Gradiente Impulsado la Decisión de los Árboles y los Bosques Aleatorios.
  2. No-Árbol Basado En Modelos:Lineal, kNN o de Red Neuronal de base.

Vamos a considerar al aplicar OHE y cuándo aplicar la Etiqueta de Codificación, mientras que la construcción de árbol basado en modelos.

Aplicamos OHE cuando:

  1. Cuando los valores que se cerca uno del otro en la etiqueta de codificación corresponden a los valores de destino que no están cerca (datos no lineales).
  2. Cuando la categórica no es una función ordinal (perro,gato,ratón).

Aplicamos la Etiqueta de codificación cuando:

  1. De la categoría de los característica es ordinal (Jr.kg, Sr.kg, la escuela Primaria, secundaria ,etc).
  2. Cuando nos puede venir con una etiqueta de encoder asigna cerca de etiquetas para las categorías similares:Esto lleva a menos spilts en los árboles por lo tanto reduciendo el tiempo de ejecución.
  3. Cuando el número de categórico características en el conjunto de datos es enorme:Una caliente codificación categórica cuentan con gran número de valores puede llevar a (1) alto consumo de memoria y (2) el caso cuando no categórica características rara vez son utilizados por el modelo.Usted puede lidiar con el 1er caso si se emplean matrices dispersas.El 2º caso puede producirse si se puede construir un árbol con sólo un subconjunto de características.Por ejemplo, si usted tiene 9 numérico características y 1 categórica con 100 valores únicos y uno-caliente-codificado categórica característica, usted recibirá 109 características.Si un árbol es construido con sólo un subconjunto de características, 9 iniciales numérico características rara vez se utiliza.En este caso, usted puede aumentar el parámetro de control de tamaño de este subconjunto.En xgboost se llama colsample_bytree, en sklearn del Bosque Aleatorio max_features.

En caso de querer continuar con OHE, como @AN6U5 sugerido, puede que desee combinar PCA con OHE.

Vamos a considerar cuando se aplican OHE y Codificación de Etiqueta, mientras que la construcción no árbol basado en modelos.

Para aplicar la Etiqueta de codificación, la dependencia entre la función y el objetivo debe ser lineal en el orden de la Etiqueta de Codificación para ser utilizados con eficacia.

Del mismo modo, en caso de que la dependencia no es lineal, puede que desee utilizar OHE para el mismo.

Nota:Algunos de la explicación ha sido referencia de Cómo Ganar una Competencia de la Ciencia de Datos de Coursera.

LabelEncoder es para datos ordinales, mientras que OHE es para datos nominales.

Licenciado bajo: CC-BY-SA con atribución
scroll top