Como ya lo observó, su elección de características (selección de características) puede tener un impacto en qué hiperparámetros para su algoritmo son óptimos, y qué hiperparámetros que seleccione para su algoritmo pueden tener un impacto en qué elección de características sería óptima.
Entonces, sí, si realmente le importa exprimir cada uno por ciento del rendimiento de su modelo, y puede permitirse la cantidad requerida de cómputo, la mejor solución es probablemente hacer la selección de características y el ajuste de hiperparamter "al mismo tiempo". Sin embargo, eso probablemente no sea fácil (dependiendo de cómo haga la selección de funciones). La forma en que me imagino que funciona sería como tener diferentes conjuntos de características como candidatos, y tratar la selección de un conjunto de características de todos esos conjuntos candidatos como un hiperparámetro adicional.
Sin embargo, en la práctica eso puede no ser realmente factible. En general, si no puede permitirse evaluar todas las combinaciones posibles, le recomendaría:
Optimice muy libremente los hiperparámetros, solo para asegurarse de no asignar valores extremadamente malos a algunos hiperparámetros. Esto a menudo se puede hacer a mano si tiene una buena comprensión intuitiva de sus hiperparámetros, o si se realiza con un breve procedimiento de optimización de hiperparámetros utilizando solo un conjunto de características que, de lo contrario, sabe que son bastante buenas.
Selección de funciones, con hiperparámetros que tal vez no estén 100% optimizados pero al menos tampoco extremadamente terribles. Si ya tiene al menos un algoritmo de aprendizaje automático configurado de forma decente, tener buenas características será significativamente más importante para su rendimiento que los hiperparámetros de microoptimización. Ejemplos extremos: si no tiene características, no puede predecir nada. Si tiene una función de trampa que contiene la etiqueta de clase, puede clasificar perfectamente todo.
Optimice los hiperparámetros con las funciones seleccionadas en el paso anterior. Este debería ser un buen conjunto de características ahora, donde en realidad puede valer la pena optimizar un poco los hiperparámetros.
Para abordar la pregunta adicional que Nikolas publicó en los comentarios, sobre cómo todas estas cosas (selección de características, optimización de hiperparámetros) interactúan con la validación cruzada k-fold: yo diría que depende.
Siempre que use datos en uno de los pliegues para algo, y luego evalúe el rendimiento en ese mismo pliegue, obtendrá una estimación sesgada de su rendimiento (sobreestimará el rendimiento). Por lo tanto, si usa datos en todos los pliegues para el paso de selección de características y luego evalúa el rendimiento en cada uno de esos pliegues, obtendrá estimaciones sesgadas del rendimiento para cada uno de ellos (lo cual no es bueno). Del mismo modo, si tiene una optimización de hiperparámetros basada en datos y utiliza datos de ciertos pliegues (o todos los pliegues), y luego evalúa en esos mismos pliegues, nuevamente obtendrá estimaciones sesgadas de rendimiento. Las posibles soluciones son:
Repita la tubería completa dentro de cada pliegue por separado (por ejemplo, dentro de cada pliegue, haga la selección de características + optimización de hiperparámetro y modelo de entrenamiento). Hacer esto significa que la validación cruzada k-fold le brinda estimaciones imparciales del rendimiento de esta tubería completa .
Divida su conjunto de datos inicial en un "conjunto de datos de preprocesamiento" y un "conjunto de datos de entrenamiento / prueba". Puede hacer su selección de funciones + optimización de hiperparámetros en el "conjunto de datos de preprocesamiento". Luego, arregla las características e hiperparámetros seleccionados y realiza la validación cruzada k-fold en el "conjunto de datos de tren / prueba". Hacer esto significa que la validación cruzada k-fold le brinda estimaciones imparciales del rendimiento de su algoritmo ML dado el conjunto de características fijas y los valores de hiperparámetro .
Observe cómo las dos soluciones dan como resultado estimaciones de rendimiento ligeramente diferentes. Cuál es más interesante depende de su caso de uso, depende de cómo planea implementar sus soluciones de aprendizaje automático en la práctica. Si usted es, por ejemplo, una empresa que tiene la intención de tener la cartera completa de selección de funciones + optimización de hiperparámetros + capacitación que se ejecuta automáticamente todos los días / semana / mes / año / lo que sea, también le interesará el desempeño de esa completa tubería, y querrás la primera solución.
Si, por otro lado, solo puede permitirse el lujo de hacer la selección de funciones + optimización de hiperparámetros una sola vez en su vida, y luego solo volver a entrenar su algoritmo de forma regular (con los valores de conjunto de características e hiperparam fijos), entonces el rendimiento solo de ese paso será lo que le interesa, y debe optar por la segunda solución