Codificación de características categóricas de alta cardinalidad (muchas categorías) cuando las características difieren mucho de la cardinalidad

8

He estado buscando preguntas sobre la codificación de características categóricas, pero no pude encontrar ninguna que discuta mi problema. Disculpas si me lo perdí.


Digamos que tenemos un conjunto de datos con variables binarias y nominales de aproximadamente igual importancia cada una.

La mayoría de los clasificadores no pueden ocuparse directamente de los tipos categóricos, por lo que estos deben ser transformados, por ejemplo, utilizando la codificación de un punto (variables ficticias) como se explica en esta respuesta .

  • Si una variable categórica tiene una alta cardinalidad, ¿no la codificaría de esta manera "sobrecargando" otras variables (por ejemplo, binarias)? Por "cardinalidad" me refiero al número de categorías en una variable nominal.

  • Si nuestro modelo clasificador conoce las relaciones entre variables, ¿no intentaría innecesariamente encontrar relaciones entre los "componentes" binarios binarios introducidos de la misma variable?

Y si es así, ¿cómo podría abordarse esto?

La mejor solución que se me ocurre es agrupar lógicamente las propiedades de alta cardinalidad en "cubos", sin embargo, si hay suficientes valores únicos para ser un problema, agruparlos manualmente también consumiría trabajo.


Editar: Esto es trivial y solo aborda parcialmente el problema, pero una de las cosas que terminé haciendo es reemplazar todos los valores categóricos relativamente raros con una nueva categoría, "otra". Podría llevar mucho tiempo optimizar el umbral cuando se considera que el valor es "raro", pero al menos este enfoque puede automatizarse.

usuario5226582
fuente
1
Otra solución podría ser utilizar el lazo con alguna versión del "lazo agrupado" para que el algoritmo proponga categorías que podrían fusionarse, ya que son estadísticamente similares. Esto se ha discutido aquí antes, ver stats.stackexchange.com/questions/146907/…
kjetil b halvorsen

Respuestas:

8

Si una variable categórica tiene una alta cardinalidad, ¿no la codificaría de esta manera "sobrecargando" otras variables (por ejemplo, binarias)?

Depende del algoritmo.

Los algoritmos basados ​​en el muestreo de las columnas (bosques aleatorios, árboles extremadamente aleatorios, aumento de gradiente o un clasificador en bolsas ...) entrenan muchos modelos en submuestras de datos. Si el 90% de sus columnas representan una variable "dummified", es probable que una gran cantidad de modelos estén trabajando en la misma variable, por lo tanto, haciéndolos más correlacionados de lo que deberían, lo que aumenta el rendimiento.

Los métodos de regresión lineal no se verán afectados, simplemente darán un peso a cada variable binaria producida por la variable codificada.

Con los vecinos más cercanos y los métodos basados ​​en similitudes (como los SVM de kernel), el impacto también debería ser limitado. No importa el número de columnas, lo único que importa al final es el producto interno o la distancia entre dos líneas de sus datos. Sin embargo, el número de columnas que se deriva de una variable nominal, la distancia (o producto interno) solo puede ser 0 o 1 (las variables nominales fueron iguales o no).

Si nuestro modelo clasificador conoce las relaciones entre variables, ¿no intentaría innecesariamente encontrar relaciones entre los "componentes" binarios introducidos de la misma variable?

¿Cómo es su clasificador "consciente" de las relaciones entre variables? No estoy seguro de poder abordar esta pregunta.

Y si es así, ¿cómo podría abordarse esto?

En el caso de cualquier método que se base en muestras de las columnas, se podrían asignar pesos previos a las columnas (para que no se seleccionen con las mismas probabilidades). Sin embargo, no tengo ninguna implementación en mente que haga esto. Una solución rápida podría ser repetir las otras columnas, para que aumente la probabilidad de ser seleccionado artificialmente.

RUser4512
fuente