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.