El maravilloso paquete libsvm proporciona una interfaz de python y un archivo "easy.py" que busca automáticamente los parámetros de aprendizaje (costo y gamma) que maximizan la precisión del clasificador. Dentro de un conjunto de candidatos de parámetros de aprendizaje, la precisión se opera mediante la validación cruzada, pero siento que esto socava el propósito de la validación cruzada. Es decir, en la medida en que los propios parámetros de aprendizaje pueden ser elegidos de una manera que podría causar un sobreajuste de los datos, siento que un enfoque más apropiado sería aplicar la validación cruzada a nivel de la búsqueda en sí misma: realizar la búsqueda en un conjunto de datos de entrenamiento y luego evaluar la precisión final del SVM resultante de los parámetros de aprendizaje finalmente elegidos mediante evaluación dentro de un conjunto de datos de prueba separado. ¿O estoy pasando por alto algo aquí?
Respuestas
¿Demasiados anuncios?Si aprendes los hiperparámetros en los datos completos de entrenamiento y luego haces una validación cruzada, obtendrás una estimación de rendimiento optimista sesgada, porque los datos de prueba en cada pliegue ya se habrán utilizado para establecer los hiperparámetros, por lo que los hiperparámetros seleccionados son seleccionados en parte porque se ajustan a los datos en el conjunto de prueba. El sesgo optimista introducido de esta manera puede ser inesperadamente grande. Ver Cawley and Talbot, "On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation", JMLR 11(Jul):2079−2107, 2010. (Particularmente sección 5.3). Lo mejor que puedes hacer es la validación cruzada anidada. La idea básica es que validas cruzadamente todo el método utilizado para generar el modelo, por lo que tratas la selección del modelo (elegir los hiperparámetros) como simplemente parte del procedimiento de ajuste del modelo (donde se determinan los parámetros) y no puedes cometer un error grave.
Si usas la validación cruzada en el conjunto de entrenamiento para determinar los hiperparámetros y luego evalúas el rendimiento de un modelo entrenado usando esos parámetros en todo el conjunto de entrenamiento, utilizando un conjunto de datos de prueba separado, eso también está bien (si tienes suficientes datos para ajustar el modelo de forma fiable y estimar el rendimiento utilizando particiones disjuntas).