¿La ingeniería de características es relevante para los bosques aleatorios? ¿Cómo son relevantes las transformaciones de centrado, escala y Box-Cox en este contexto?

Las tres transformaciones mencionadas por el OP son ejemplos de transformaciones monótonas: usted toma una función creciente ([math] f (x) = x – \ overline {x}, f (x) = x ^ 3, .. [/ math ]), y su función original, y transfórmela con la función creciente.

El algoritmo Random Forest es invariable para este tipo de transformación monótona . Si aplica dicha función a sus características, este efecto neto será solo un cambio de los puntos de división óptimos por la misma función.

Sin embargo, hay muchos ejemplos en los que la ingeniería de características todavía es importante para los bosques aleatorios, porque la mayoría de la ingeniería de características se extiende más allá de las transformaciones monótonas. Aquí hay unos ejemplos:

  • Cálculos aritméticos modulares, como calcular la hora del día o el día del mes a partir de una marca de tiempo. Si su modelo necesita aprender sobre algún comportamiento que ocurre todos los días a las 7 pm, será muy difícil sin introducir una función de hora del día.
  • Como menciona Warren Smith, el algoritmo de RF funciona haciendo divisiones verticales y horizontales de los datos (es decir, para [math] (x_1, \ ldots, x_n) \ in \ mathbb {R} ^ n [/ math], crea medios espacios de la forma [math] \ {x_i> C \} [/ math]. Si sus datos viven en algún plano oblicuo, entonces el algoritmo de división tiene que trabajar más para capturar estas líneas diagonales, lo que podría justificar una rotación de los datos.
  • Los datos categóricos son un área difícil para implementaciones como sklearn en python. Dichos datos primero deben convertirse en entradas numéricas, y puede hacerlo de dos maneras:
    1. Dados n niveles categóricos, cree una nueva característica tomando valores [matemática] 0,1, \ ldots, n-1 [/ matemática]. Este método tiene la desventaja de imponer relaciones artificiales entre los niveles.
    2. Dados n niveles categóricos, cree n-1 o n variables ficticias, cada una de las cuales es un indicador binario de uno de los niveles. Esto elimina el inconveniente de imponer relaciones entre los niveles categóricos, pero también diluye la fuerza de la función. Una RF en cada punto de división busca la característica más predictiva, pero si ha cambiado una columna a 5 o 10 de ellas, la potencia de cada nueva columna ficticia individualmente disminuye, por lo que tal vez la característica original nunca llegue a hablar.
  • Finalmente, quizás el ejemplo más importante: en la práctica, los datos con los que comienzas no son los que entrarán en un modelo. Debe procesarse dramáticamente: por ejemplo, convertir eventos con marca de tiempo en características con las que un algoritmo puede trabajar. Esto no es endémico para los bosques aleatorios, pero las decisiones que tome con el preprocesamiento aquí son muy importantes.

Sí, la ingeniería de características es relevante para bosques aleatorios.

Tiene razón en que las simples transformaciones lineales (centrado, escalado) de sus datos no harán ninguna diferencia para entrenar un árbol que no sean las etiquetas. Por extensión, lo mismo es cierto para los bosques aleatorios. Pero …

Wikipedia define Feature Engineering como:

El proceso de utilizar el conocimiento del dominio de los datos para crear características que hacen que los algoritmos de aprendizaje automático funcionen mejor.

El proceso de usar el conocimiento del dominio para crear características es absolutamente relevante.

Por ejemplo, los árboles solo crean límites ortogonales a sus características. Digamos que tiene dos características x1 y x2. Si sus clases objetivo son realmente funciones del ángulo entre sus características, puede obtener un modelo más poderoso diseñando una nueva característica [math] tan ^ {- 1} (\ frac {x1} {x2}) [/ math]

Intentaré agregar una imagen para mostrar lo que quiero decir un poco más tarde. Si esta respuesta no ayuda, no dudes en enviarme un mensaje privado.

Para bosques aleatorios y otros modelos basados ​​en árboles, no necesita aplicar las técnicas mencionadas en su pregunta, así como otras técnicas de preprocesamiento como eliminar la multicolinealidad y las características con poca variación.

Sin embargo, debe preprocesar las características categóricas que tienen muchos niveles si crea árboles de decisión en bosques aleatorios utilizando CART . Para una función con niveles [matemáticos] N [/ matemáticos], CART necesita buscar en las combinaciones [matemática] 2 ^ N-1 [/ matemática] una división. Incluso para una función con no muchos niveles, por ejemplo, 30, le tomaría a CART “para siempre” buscar una división y la gran cantidad de combinaciones también hace que la inferencia (casi) no tenga sentido.

Una solución es usar C4.5 para construir árboles de decisión en bosques aleatorios, ya que C4.5 adopta un método más inteligente para dividir nodos que el enfoque de búsqueda exhaustiva de CART. Si aún desea usar CART, puede “dummificar” dichas funciones para que se vuelvan numéricas, o puede “agrupar” los niveles originales en menos (por ejemplo, países a continentes) para reducir el espacio de búsqueda para CART.

Recientemente Kaggle ha promovido su función de Script.
Las personas ahora también tienen acceso a los guiones que otros competidores han compartido. Pueden ejecutarlos directamente en kaggle y enviar los resultados como propios. Esto eleva los puntajes a vencer por un factor importante.

La ingeniería de características es, por supuesto, clave para aumentar el rendimiento de su modelo, sin embargo, la técnica que distingue lo mejor del paquete es apilar y mezclar.

Establezca una combinación de algoritmos en una primera capa y use la combinación media o lineal de estas predicciones de primera capa para entrenar un algoritmo de segunda capa (generalmente regresión lineal). Es muy eficiente y menos obvio dominar que optimizar un bosque aleatorio a través de la búsqueda de cuadrícula. Consulte la Guía de ensamblaje de Kaggle para una buena revisión de estas técnicas.

Como propuso Warren, Feature Engineering es un proceso para hacer que sus datos sin procesar sean significativos para su modelo de ML previsto. Sin embargo, como veo en los detalles de su pregunta, solicita un preprocesamiento de datos como el escalado, la normalización. Si este es el caso, estos pasos de preprocesamiento no son relevantes para los modelos basados ​​en árboles, ya que la única información importante para un árbol es el orden de las instancias con respecto a una columna de características en particular. Transformarlo no tiene sentido a menos que el orden relativo no permanezca igual.