Validación de clasificadores

Si en el artículo anterior veíamos algunos criterios de evaluación de clasificadores esta vez vamos a por la validación.

Si nos damos una vuelta por Kaggle veremos que la mayoría de los conjuntos de datos nos llegan ya divididos en conjuntos de entrenamiento y de prueba. Sin embargo, en la vida real partimos de una muestra de datos etiquetada que habitualmente usamos al completo para construir el clasificador, porque el tamaño de la muestra afecta sensiblemente a la calidad de este. Y si utilizamos todo el conjunto de datos para entrenamiento, ¿cómo validamos la clasificación?

Para la validación no podemos utilizar la misma muestra de entrenamiento porque, como estaría clasificando ejemplos que ya conoce, obtendríamos un rendimiento muy superior al real. Lo que queremos es tantear cómo se comportaría el clasificador con casos nuevos, desconocidos hasta ahora.

Partición

La partición (holdout) es el método más rápido y sencillo, y también menos fiable, de validación. Seleccionamos aleatoriamente un subconjunto de datos para el entrenamiento mientras que el resto los utilizaremos para la evaluación. Como no estamos utilizando todo el conjunto de datos para el entrenamiento los resultados dependen del particionado que hayamos realizado, de los casos que haya abarcado el conjunto de entrenamiento y los casos que hayan quedado en el conjunto de prueba.

Una forma de mejorar la fiabilidad es repetir el particionado varias veces y promediar el resultado.

Validación cruzada

Si el problema del método de particionado es que no estamos utilizando todo el conjunto de datos para realizar el entrenamiento, y que obtendremos resultados de validación muy diferentes en función de la partición que hayamos realizado, podemos pensar en otros métodos que resuelvan este problema.

Para ello, construiremos el clasificador a partir de todos los datos disponibles y estimaremos su bondad en base a clasificadores similares. Estos otros clasificadores se construyen utilizando una parte significativa del conjunto de datos como entrenamiento, dejando el resto del conjunto de datos para la validación. Este proceso se repite varias veces y se promedia el resultado para evitar desviaciones.

Validación cruzada de exclusión (leave-one-out)

En la validación cruzada de exclusión para cada caso del conjunto de datos construimos un clasificador con todos los demás casos, y probamos el clasificador con el caso que hemos excluido del entrenamiento. Promediamos los resultados para obtener una estimación de la validación del clasificador entrenado con todos los casos.

Obviamente este método es extremadamente costoso, porque nos exige construir N clasificadores con N-1 casos de entrenamiento cada uno.

Validación cruzada aleatoria

Si la validación cruzada de exclusión es demasiado costosa por su exhaustividad, podemos volver a plantearnos el método de particionado pero esta vez realizando K iteraciones sobre él. En cada iteración seleccionamos aleatoriamente un conjunto de entrenamiento y un conjunto de prueba, y finalmente realizamos el promedio de los resultados de validación de cada iteración para estimar la validación del clasificador entrenado con todos los casos.

Algunos números típicos para este tipo de validación cruzada:

  • Entrenamiento: 2/3 del conjunto de datos
  • Prueba: 1/3 del conjunto de datos
  • Iteraciones: 30

Sin embargo, este método también tiene un problema: como estamos eligiendo casos de forma aleatoria en cada iteración es posible que algún caso no sea seleccionado nunca para el entrenamiento o que sea seleccionado muchas más veces que el resto, desviando la precisión del clasificador.

K-iteraciones (k-fold)

La validación cruzada de exclusión resulta demasiado costosa por su exhaustividad, pero esta exhaustividad es a la vez su mayor ventaja. La validación cruzada aleatoria resolvía el problema de rendimiento de la validación cruzada de exclusión, pero introducía un nuevo problema al realizar la selección de casos de entrenamiento de forma aleatoria en cada iteración, pudiendo excluir casos o repetirlos múltiples veces. El método de K-iteraciones (k-fold) resuelve ambos problemas: no es tan intensiva en su exhaustividad como la exclusión, pero sí se asegura de utilizar todos los casos del conjunto de prueba. Además, garantiza que se utilizan todos los casos de forma equitativa, evitando las desviaciones típicas del método aleatorio.

En K-iteraciones dividimos el conjunto de datos en K bloques (folds). Un número típico de bloques es k=10. Para cada uno de estos bloques construimos un clasificador con todo el conjunto de datos excepto el bloque seleccionado, sobre el que evaluaremos el clasificador construido. Finalmente realizamos un promedio de los resultados de cada clasificador para obtener una estimación de la validación del clasificador resultante del entrenamiento con todo el conjunto de datos.

Conclusión

Ya hemos visto los criterios de evaluación de clasificadores (tasa de error, AUC,…) y cómo hacer una estimación más adecuada de su valor mediante los métodos de validación. Con esto ya podemos construir diferentes clasificadores y determinar cuál encaja mejor en el problema que enfrentamos, pero ¿cuánto mejor es uno que otro? ¿Las diferencias en estas estimaciones son significativas o se deben sólo al azar?

¡Lo averiguaremos en próximos artículos!

0

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.