No necesita conocimiento de dominio (el conocimiento de lo que significan sus datos ) para realizar ingeniería de características (encontrar formas más expresivas de enmarcar sus datos).
Como explicó Tu N. , puede encontrar combinaciones de funciones "rápidas y sucias" que podrían ser útiles con bastante facilidad. Dada una salida y una característica individual , puede tomar las siguientes transformaciones, . Una comprobación rápida de la utilidad de la transformación es si la correlación entre es mayor que la correlación entre .yXX′∈ { eX, log( x ) , x2, x3, tanh( x ) }{ y,x′}{ y, x }
Advertencia sobre la correlación: la correlación no muestra todo y, según el modelo que esté utilizando (altamente no lineal, como NN o RF) y la interacción con otras variables, un cambio en la correlación podría no significar nada.
Sin embargo, si está utilizando un modelo lineal simple como la regresión logística, es un buen indicador de rendimiento. Sin embargo, la mejor manera de evaluar dicha transformación, como lo señaló Fokhruz Zaman , sería construir un modelo con y sin su función transformada, y ver cómo evoluciona el error de validación (en sus pliegues de Validación cruzada).
Es bastante fácil detectar transformaciones de una sola característica de esta manera. Esos se aplican a muchos datos, donde una relación más expresiva entre su entrada y salida podría estar en una escala diferente. Por ejemplo, la relación entre Ingresos y "Felicidad" parece ser logarítmica, pero nunca registraría el registro de los ingresos de un participante directamente.
Encontrar combinaciones de características es más difícil. Para empezar, si desea probar cada adición de 2 características, y tiene características , tiene un orden de transformaciones para probar. Para encontrar tales transformaciones, puede aplicar un modelo no lineal (como NN o RF) al problema e intentar ver qué es lo que está aprendiendo. Si puede identificar lo que está haciendo una capa intermedia en un NN, puede calcular previamente su resultado y agregarlo como una nueva característica. No necesitará calcularlo nuevamente, y probablemente intentará aprender algo nuevo.rere2
Puede ser difícil interpretar la representación interna de un NN, o incluso interpretar la importancia de la característica en un bosque aleatorio. Un método más fácil, y probablemente más adecuado para este propósito, sería impulsar con árboles de decisión. Hay muchas bibliotecas que implementan Boosting, y si estás en la competencia de Kaggle como parece implicar tu publicación, muchos participantes usan XGBoost , por lo que puedes encontrar ayuda / tutoriales sobre lo que voy a describir.
Primero, ejecute su algoritmo de refuerzo utilizando solo tocones , árboles de decisión de 1 nivel. Los tocones son muy débiles, pero Boosting lo convierte en un modelo razonable. Esto actuará como su línea de base. Dependiendo de la biblioteca que esté utilizando, debería poder visualizar con bastante facilidad cuáles son las características más utilizadas, y debería trazarlas contra la respuesta (o hacer un histograma si la respuesta es categórica) para identificar algún patrón. Esto podría darle una intuición sobre lo que sería una buena transformación de una sola característica.
A continuación, ejecute el algoritmo Boosting con árboles de decisión de 2 niveles. Este modelo es mucho más complejo que el anterior; Si dos variables tomadas juntas tienen más poder que el tomado individualmente, este modelo debería superar al anterior (de nuevo, no en términos de error de entrenamiento, ¡sino en el error de validación!). En base a esto, debería poder extraer qué variables se usan a menudo juntas, y esto debería llevarlo a posibles transformaciones de funciones múltiples.
En material relacionado, recomendaría los siguientes videos, ya que son fáciles de seguir.