1 votos

¿Especificar una característica categórica falsa a Random Forest?

  1. Supongamos que tengo una mezcla de algunas características categóricas y numéricas numéricamente continuas. Me gustaría entrenar un clasificador basado en las características mediante RandomForestClassifier() en SciKi Learn.

    Se dice que el bosque aleatorio maneja tanto características categóricas como características numéricas continuas.

    Pero en mi conjunto de datos, los valores de las características categóricas se representan como números, como los números de identificación, 1000, 1003, .... ¿Será esto un problema para el algoritmo de aprendizaje random forest?

  2. ¿También estandarizar cada característica para que su media muestral sea cero y la varianza de la muestra sea uno, tiene sentido para las características categóricas que son falsificados como números, cuando se utilizan los bosques al azar? Vi que alguien hizo esto, y no puedo averiguar si eso tiene sentido.

Gracias.

3voto

katya Puntos 1224
  1. Sí; sin embargo, es problemático no para el algoritmo de aprendizaje por sí mismo pero para la interpretación: asume una continuidad direccional (por ejemplo, el id de la muestra 1500 es un 50% 'mayor' que el id de la muestra 1000), convirtiéndose así en una variable pseudocontinua sin sentido. Intenté simular esto y era importante para las clasificaciones IncMSE y NodePurity. Sin embargo, el grado de importancia dependerá de su conjunto de datos particular.
  2. Esto parece a) innecesario para los bosques aleatorios y b) incorrecto por las razones especificadas anteriormente.

2voto

Bauna Puntos 176

Scikit-learn no admite directamente características categóricas en árboles o bosques (véase el comentario de uno de los desarrolladores principales sobre el SO , señalando a un intento de aplicación actualmente estancado ).

Si las deja codificadas como números de identificación, esto impone un orden en las clases, y el bosque hará preguntas que se basan en ese orden y que probablemente sean poco naturales. Debido a que las entradas son tratadas como números reales, hará divisiones sólo como class_id <= 1004 Lo cual sólo tiene sentido si las clases tienen realmente un orden natural. Esto es realmente problemático para la expresividad del modelo: es posible para preguntar primero class_id <= 1004 y luego class_id > 1003 para elegir una sola clase, pero el método codicioso utilizado para aprender los árboles a menudo hará que la primera división no parezca muy buena y, por lo tanto, se desaconsejará este tipo de preguntas.

La solución típica es utilizar un codificación de una sola vez para que cada característica categórica pueda ser considerada independientemente. Esto altera un poco el procedimiento de muestreo en los bosques (un árbol determinado puede preguntar por el ID de clase 1000 pero no por el 1003), pero es mucho mejor que la alternativa.

Estoy de acuerdo con katya en que la estandarización es innecesaria para los bosques aleatorios. Cada nodo del árbol considerará los puntos de división según algún tipo de medida de pureza después de la división (en scikit-learn, ya sea la entropía o el coeficiente de Gini). Si se estandarizan las variables, sólo se cambian las escalas de las variables monotónicamente, lo que significa que cada posible división en el espacio original tiene una división exactamente equivalente en el espacio estandarizado. Es posible que a veces se utilice algún tipo de regularización en los bosques que sea sensible a la escala, pero hasta donde yo sé debería terminar con modelos exactamente equivalentes.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X