Me gustaría hacer un experimento que demuestre que la validación cruzada es mejor método para evaluar el modelo que el método habitual. Tengo la siguiente idea:
- Crear un gran conjunto artificial con fines de clasificación (digamos 100 000 ejemplos).
- Tome una pequeña muestra de todo el conjunto. Digamos 5000.
- Intente estimar el error utilizando el método hold out con 5000 y utilizando la validación cruzada.
- Comparar los errores teniendo en cuenta el error en todo el conjunto, que es el error real si fuera todo nuestro espacio de muestras.
Enlace al código:
https://github.com/pawelpeksa/msCV (rama maestra)
Estoy comprobando esta idea utilizando SVM. En primer lugar he encontrado hyperparameter C para SVM utilizando hyperopt paquete (pero no debería importar de todos modos ya que es sólo una herramienta para evaluar el modelo, yup?). Hice 100 ejecuciones para obtener algunas estadísticas. Mis resultados:
A). 5000 muestra de prueba de retención: 0,9338 +- 0,00434869073528 - precisión en la muestra de retención tras el entrenamiento.
B). cv en conjunto holdout: 93.4009034436 +- 2.22044604925e-14 - precisión calculada con cv con 10 pliegues
C). conjunto de datos completo 0,9370653 +- 0,000283225899239 - precisión utilizando el conjunto de datos completo (que considero un error real teniendo en cuenta el tamaño del conjunto de datos).
D) conjunto de datos de entrenamiento: 0,934448571429 +- 0,00195385751366 - precisión del modelo en los datos que se utilizaron para entrenar
Lo inesperado para mí. La precisión de CV (B) está más lejos del error real que A. Se supone que CV es el mejor método para evaluar el modelo porque utilizamos más datos para la evaluación y, por tanto, debería estar más cerca del error real. Además, la precisión del modelo comprobada con los datos de entrenamiento es menor que la precisión comprobada con todo el conjunto de datos, lo que me parece ridículo. Lo que también he notado es el hecho de que std de estimación cv es mucho menor que en otros casos. ¿Quizás por eso CV es mejor para nosotros?
Puedo oler el error lógico aquí desde la distancia. ¿Alguna pista?
¡Muchas gracias!