Digamos que tengo un problema de clasificación con $c$ clases. Para esto, tengo un conjunto de datos que contiene $N$ vectores de características distintas con $n$ características. Supongamos que $N$ es del orden de $10^5$, y tanto $c$ como $n$ son del orden de $10$, por lo que hay suficientes datos de entrenamiento para hacer afirmaciones estadísticamente razonables.
Ahora tengo tres clasificadores diferentes (digamos un RandomForest, una NeuralNetwork y un SVM) que quiero entrenar en el conjunto de datos y luego obtener una estimación de qué tan bien se desempeñó cada uno de los clasificadores y qué tan bien generaliza cada clasificador. Cada clasificador tiene hiperparámetros (por ejemplo, profundidad del árbol para el RandomForest, número de capas en la NeuralNetwork, valor de C para SVM, etc.).
¿Cuál es la mejor manera de decidir ahora cuál clasificador se desempeña mejor? ¿Cómo puedo decir "El mejor RandomForest tiene una profundidad de árbol de $x$ y se desempeña un $p$% mejor que la mejor NeuralNetwork (que tiene $h$ capas ocultas)?"
Mi enfoque sería el siguiente:
- Para cada uno de los tres clasificadores diferentes, definir una cuadrícula de parámetros de los hiperparámetros que deben ser analizados.
- Para cada uno de los tres clasificadores, realizar una validación cruzada anidada individual: Según esta pregunta en este sitio, el bucle interno de la CV anidada selecciona de la cuadrícula de parámetros previamente definida el mejor conjunto de hiperparámetros. El bucle externo me dice, entonces, qué tan estable es esta elección de hiperparámetros. Si la desviación estándar entre las puntuaciones de los $k$ modelos externos resultantes es pequeña, entonces sé que la elección de hiperparámetros es estable y no depende fuertemente del subconjunto de datos que utilicé para el entrenamiento.
- El proceso en el paso 2 me permite identificar los mejores hiperparámetros para cada uno de los tres clasificadores. Fijo estos hiperparámetros. Supongamos que mi modelo es estable y que los hiperparámetros no varían mucho entre los pliegues.
- Utilizo los resultados de la validación cruzada externa del paso 2 para obtener una estimación imparcial de cuán bien se desempeña cada uno de los tres clasificadores. Aquel con la puntuación más alta en la CV anidada es el que probablemente se desempeña mejor en nuevos datos no vistos.
- Si quisiera usar uno de los tres clasificadores para una clasificación adicional de datos no vistos, seleccionaría el que tenga la puntuación más alta en la CV anidada, tal como se menciona en el paso 4, y volvería a entrenar este clasificador con todos los datos que tengo.
¿Es este un enfoque válido? ¿Puedo usar los resultados de la CV anidada para obtener una estimación de cuán bien se desempeña el clasificador en datos no vistos o debo hacer una nueva CV de k-fold con el mejor conjunto de hiperparámetros y usar los resultados de este como mi estimación?
Además: ¿Es válido realizar la CV anidada para los tres clasificadores de manera independiente - como se presenta aquí - o debo hacer lo siguiente:
Realizar la CV anidada donde en el bucle interno no solo se ajustan los hiperparámetros de un clasificador, sino que cada uno de los tres clasificadores con su cuadrícula de hiperparámetros respectiva es accesible. ¿En este enfoque no sabría cuán bien se desempeña el "mejor" de cada uno de los tres clasificadores, verdad?