Saltar al contenido

Cómo escalar el conjunto de pruebas para el aprendizaje automático

25 de septiembre de 2020

Subir la colina de la prueba es un enfoque para lograr buenas o perfectas predicciones en una máquina de aprendizaje de la competencia sin tocar el conjunto de entrenamiento o incluso desarrollar un modelo de predicción.

Como enfoque de las competiciones de aprendizaje de máquinas, está legítimamente mal visto, y la mayoría de las plataformas de competición imponen limitaciones para evitarlo, lo cual es importante.

Sin embargo, subir la colina del conjunto de pruebas es algo que un practicante de aprendizaje de máquinas hace accidentalmente como parte de la participación en una competición. Al desarrollar una implementación explícita para escalar una colina en un conjunto de pruebas, ayuda a comprender mejor lo fácil que puede ser sobreajustar un conjunto de datos de prueba utilizándolo en exceso para evaluar los conductos de modelado.

En este tutorial, descubrirá cómo escalar el conjunto de pruebas para el aprendizaje de la máquina.

Después de completar este tutorial, lo sabrás:

  • Se pueden hacer predicciones perfectas subiendo la colina del conjunto de pruebas sin siquiera mirar el conjunto de datos de entrenamiento.
  • Cómo escalar el conjunto de pruebas para las tareas de clasificación y regresión.
  • Implícitamente escalamos el conjunto de pruebas cuando lo utilizamos en exceso para evaluar nuestros conductos de modelización.

Ponga en marcha su proyecto con mi nuevo libro «Data Preparation for Machine Learning», que incluye tutoriales paso a paso y el El código fuente de Python archivos para todos los ejemplos.

Empecemos.

Cómo escalar el conjunto de pruebas para el aprendizaje automático

Cómo escalar el conjunto de pruebas para el aprendizaje automático
Foto de Stig Nygaard, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en cinco partes; son:

  1. Subir a la colina el conjunto de pruebas
  2. Algoritmo de escalada de colinas
  3. Cómo implementar la escalada de colinas
  4. Conjunto de datos de clasificación de la diabetes de Hill Climblage
  5. Conjunto de datos sobre la regresión de la vivienda en Hill Climbimblage

Subir a la colina el conjunto de pruebas

Las competiciones de aprendizaje de máquinas, como las de Kaggle, proporcionan un completo conjunto de datos de entrenamiento, así como sólo la entrada para el conjunto de pruebas.

El objetivo de una competición determinada es predecir los valores objetivo, como las etiquetas o los valores numéricos del conjunto de pruebas. Las soluciones se evalúan contra los valores objetivo del conjunto de pruebas ocultos y se puntúan adecuadamente. La presentación con la mejor puntuación contra el conjunto de pruebas gana la competencia.

El reto de una competición de aprendizaje de máquinas puede enmarcarse como un problema de optimización. Tradicionalmente, el participante en la competición actúa como el algoritmo de optimización, explorando diferentes conductos de modelización que dan lugar a diferentes conjuntos de predicciones, puntuando las predicciones, y luego realizando cambios en el conducto que se espera que den lugar a una mejora de la puntuación.

Este proceso también puede ser modelado directamente con un algoritmo de optimización en el que se generan y evalúan las predicciones de los candidatos sin tener que mirar nunca el conjunto de pruebas.

Generalmente, esto se conoce como el conjunto de pruebas de escalada de colinas, ya que uno de los algoritmos de optimización más simples de implementar para resolver este problema es el algoritmo de escalada de colinas.

Aunque escalar la colina del conjunto de pruebas está justamente mal visto en las competiciones de aprendizaje de máquinas reales, puede ser un ejercicio interesante para aplicar el enfoque con el fin de aprender sobre las limitaciones del mismo y los peligros de sobreajustar el conjunto de pruebas. Además, el hecho de que el conjunto de pruebas pueda predecirse perfectamente sin tocar nunca el conjunto de datos de entrenamiento a menudo sorprende a muchos practicantes principiantes de aprendizaje automático.

Lo más importante es que implícitamente escalamos el conjunto de pruebas cuando evaluamos repetidamente diferentes tuberías de modelado. El riesgo es que la puntuación se mejore en el conjunto de pruebas a costa de un mayor error de generalización, es decir, un peor rendimiento en el problema más amplio.

Las personas que organizan competiciones de aprendizaje de máquinas son muy conscientes de este problema e imponen limitaciones a la evaluación de la predicción para contrarrestarlo, como la limitación de la evaluación a una o unas pocas por día y la presentación de los resultados en un subconjunto oculto del conjunto de pruebas en lugar de todo el conjunto de pruebas. Para más información sobre esto, véanse los documentos enumerados en la sección de lecturas adicionales.

A continuación, veamos cómo podemos implementar el algoritmo de escalada de colinas para optimizar las predicciones para un conjunto de pruebas.

¿Quieres empezar a preparar los datos?

Toma mi curso intensivo gratuito de 7 días por correo electrónico ahora (con código de muestra).

Haga clic para inscribirse y también para obtener una versión gratuita del curso en formato PDF.

Descargue su minicurso GRATUITO

Algoritmo de escalada de colinas

El algoritmo de escalada de colinas es un algoritmo de optimización muy simple.

Implica generar una solución candidata y evaluarla. Este es el punto de partida que luego se mejora gradualmente hasta que, o bien no se puede lograr ninguna mejora adicional, o nos quedamos sin tiempo, recursos o interés.

Las nuevas soluciones candidatas se generan a partir de la solución candidata existente. Típicamente, esto implica hacer un solo cambio en la solución candidata, evaluarla y aceptar la solución candidata como la nueva «actual«si es tan bueno o mejor que la solución actual anterior. De lo contrario, se descarta.

Podríamos pensar que es una buena idea aceptar sólo a los candidatos que tienen una mejor puntuación. Este es un enfoque razonable para muchos problemas sencillos, aunque, en problemas más complejos, es deseable aceptar diferentes candidatos con la misma puntuación para ayudar al proceso de búsqueda a escalar áreas planas (mesetas) en el espacio de los rasgos.

Al subir la colina del conjunto de pruebas, una solución candidata es una lista de predicciones. Para una tarea de clasificación binaria, es una lista de valores 0 y 1 para las dos clases. Para una tarea de regresión, esta es una lista de números en el rango de la variable objetivo.

Una modificación de una solución candidata para la clasificación sería seleccionar una predicción y voltearla de 0 a 1 o de 1 a 0. Una modificación de una solución candidata para la regresión sería añadir el ruido gaussiano a un valor de la lista o sustituir un valor de la lista por un nuevo valor.

La puntuación de las soluciones implica el cálculo de una métrica de puntuación, como la precisión de la clasificación en las tareas de clasificación o el error absoluto medio para una tarea de regresión.

Ahora que estamos familiarizados con el algoritmo, vamos a implementarlo.

Cómo implementar la escalada de colinas

Desarrollaremos nuestro algoritmo de escalada en una tarea de clasificación sintética.

Primero, creemos una tarea de clasificación binaria con muchas variables de entrada y 5.000 filas de ejemplos. Luego podemos dividir el conjunto de datos en trenes y conjuntos de pruebas.

El ejemplo completo figura a continuación.

Ejecutando el ejemplo primero reporta la forma del conjunto de datos creados, mostrando 5.000 filas y 20 variables de entrada.

El conjunto de datos se divide entonces en trenes y conjuntos de pruebas con unos 3.300 para el entrenamiento y unos 1.600 para las pruebas.

Ahora podemos desarrollar un escalador de colinas.

Primero, podemos crear una función que se cargue, o en este caso, definir el conjunto de datos. Podemos actualizar esta función más tarde cuando queramos cambiar el conjunto de datos.

A continuación, necesitamos una función para evaluar las soluciones candidatas, es decir, listas de predicciones.

Usaremos la precisión de la clasificación donde las puntuaciones van desde 0 para la peor solución posible hasta 1 para un conjunto perfecto de predicciones.

A continuación, necesitamos una función para crear una solución candidata inicial.

Es una lista de predicciones para las etiquetas de clase 0 y 1, lo suficientemente larga como para coincidir con el número de ejemplos del conjunto de pruebas, en este caso, 1650.

Podemos usar la función randint() para generar valores aleatorios de 0 y 1.

A continuación, necesitamos una función para crear una versión modificada de una solución candidata.

En este caso, se trata de seleccionar un valor en la solución y voltearlo de 0 a 1 o de 1 a 0.

Típicamente, hacemos un solo cambio para cada nueva solución candidata durante la escalada de la colina, pero he parametrizado la función para que puedas explorar la posibilidad de hacer más de un cambio si quieres.

Hasta ahora, todo bien.

A continuación, podemos desarrollar la función que realiza la búsqueda.

En primer lugar, se crea y evalúa una solución inicial llamando a la random_predictions() seguido de la función evaluate_predictions() función.

Luego hacemos un bucle para un número fijo de iteraciones y generamos un nuevo candidato llamando modify_predictions()…evaluarla, y si el resultado es tan bueno o mejor que la solución actual, reemplácela.

El bucle termina cuando terminamos el número preestablecido de iteraciones (elegido arbitrariamente) o cuando se alcanza una puntuación perfecta, que sabemos que en este caso es una precisión de 1,0 (100 por ciento).

La función hill_climb_testset() abajo implementa esto, tomando el conjunto de pruebas como entrada y devolviendo el mejor conjunto de predicciones encontradas durante la escalada de la colina.

Eso es todo lo que hay.

El ejemplo completo de la escalada de la colina del conjunto de pruebas se enumera a continuación.

Ejecutando el ejemplo se ejecutará la búsqueda de 20.000 iteraciones o se detendrá si se logra una precisión perfecta.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, encontramos un conjunto perfecto de predicciones para el conjunto de pruebas en unas 12.900 iteraciones.

Recordemos que esto se logró sin tocar el conjunto de datos de entrenamiento y sin hacer trampas mirando los valores objetivo del test. En lugar de eso, simplemente optimizamos un conjunto de números.

La lección aquí es que la evaluación repetida de un oleoducto de modelación contra un equipo de prueba hará lo mismo, usándolo como el algoritmo de optimización de escalada de colinas. La solución se adaptará al conjunto de pruebas.

También se crea una trama del progreso de la optimización.

Esto puede ser útil para ver cómo los cambios en el algoritmo de optimización, como la elección de lo que se debe cambiar y cómo se cambia durante la subida de la colina, impactan en la convergencia de la búsqueda.

Trazado de líneas de precisión vs. Iteración de optimización de escalada de colinas para una tarea de clasificación

Trazado de líneas de precisión vs. Iteración de optimización de escalada de colinas para una tarea de clasificación

Ahora que estamos familiarizados con la escalada de colinas del conjunto de pruebas, probemos el enfoque en un conjunto de datos reales.

Conjunto de datos de clasificación de la diabetes de Hill Climblage

Usaremos el conjunto de datos de la diabetes como base para explorar la subida de la colina el conjunto de pruebas para un problema de clasificación.

Cada registro describe los detalles médicos de una mujer, y la predicción es la aparición de la diabetes en los próximos cinco años.

El conjunto de datos tiene ocho variables de entrada y 768 filas de datos; las variables de entrada son todas numéricas y el objetivo tiene dos etiquetas de clase, por ejemplo, es una tarea de clasificación binaria.

Recomendado:  El futuro del procesamiento del lenguaje natural es brillante

A continuación se presenta una muestra de las cinco primeras filas del conjunto de datos.

Podemos cargar el conjunto de datos directamente usando Pandas, de la siguiente manera.

El resto del código permanece sin cambios.

Esto está creado para que puedas dejar tu propia tarea de clasificación binaria y probarla.

El ejemplo completo figura a continuación.

La ejecución del ejemplo informa del número de iteraciones y la precisión cada vez que se observa una mejora durante la búsqueda.

Utilizamos menos iteraciones en este caso porque es un problema más simple de optimizar ya que tenemos menos predicciones que hacer.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver que logramos una precisión perfecta en unas 1.500 iteraciones.

También se crea un gráfico de líneas del progreso de la búsqueda que muestra que la convergencia fue rápida.

Gráfica de líneas de precisión vs. Iteración de optimización de escalada para el conjunto de datos de la diabetes

Gráfica de líneas de precisión vs. Iteración de optimización de escalada para el conjunto de datos de la diabetes

Conjunto de datos sobre la regresión de la vivienda en Hill Climbimblage

Usaremos el conjunto de datos de la vivienda como base para explorar el problema de regresión del conjunto de pruebas.

El conjunto de datos de la vivienda implica la predicción del precio de una casa en miles de dólares dados los detalles de la casa y su vecindario.

Es un problema de regresión, lo que significa que estamos prediciendo un valor numérico. Hay 506 observaciones con 13 variables de entrada y una de salida.

A continuación figura una muestra de las cinco primeras filas.

Primero, podemos actualizar el load_dataset() para cargar el conjunto de datos de la vivienda.

Como parte de la carga del conjunto de datos, normalizaremos el valor del objetivo. Esto hará que la escalada de las colinas sea más simple ya que podemos limitar los valores de punto flotante al rango de 0 a 1.

Esto no es necesario en general, sólo el enfoque adoptado aquí para simplificar el algoritmo de búsqueda.

A continuación, podemos actualizar la función de puntuación para utilizar el error absoluto medio entre los valores esperados y los previstos.

También debemos actualizar la representación de una solución de las etiquetas 0 y 1 a valores de punto flotante entre 0 y 1.

La generación de la solución candidata inicial debe cambiarse para crear una lista de flotadores aleatorios.

El único cambio que se hace a una solución para crear una nueva solución candidata, en este caso, implica simplemente reemplazar una predicción elegida al azar en la lista por un nuevo flotador aleatorio.

Elegí esto porque era simple.

Recomendado:  ¡Desbloquee el futuro de la IA con Quantum Machine Learning!

Un mejor enfoque sería añadir el ruido gaussiano a un valor existente, y les dejo esto como una extensión. Si lo intentan, háganmelo saber en los comentarios de abajo.

Por ejemplo:

Finalmente, la búsqueda debe ser actualizada.

El mejor valor es ahora un error de 0.0, usado para detener la búsqueda si se encuentra.

También necesitamos cambiar la búsqueda de maximizar el puntaje a minimizarlo ahora.

La función de búsqueda actualizada con estos dos cambios se enumera a continuación.

A continuación se muestra el ejemplo completo de la escalada de la colina para una tarea de regresión.

Ejecutando el ejemplo se informa el número de iteración y MAE cada vez que se ve una mejora durante la búsqueda.

Utilizamos muchas más iteraciones en este caso porque es un problema más complejo de optimizar. El método elegido para crear soluciones candidatas también hace que sea más lento y menos probable que logremos un error perfecto.

De hecho, no lograríamos un error perfecto; en cambio, sería mejor detenerse si el error alcanzara un valor inferior a un valor mínimo como 1e-7 o algo significativo para el dominio de destino. Esto también se deja como ejercicio para el lector.

Por ejemplo:

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver que logramos un buen error al final de la carrera.

También se crea un gráfico de líneas del progreso de la búsqueda que muestra que la convergencia fue rápida y se mantiene plana durante la mayoría de las iteraciones.

Trazado de líneas de precisión vs. Iteración de optimización de la subida de colinas para el conjunto de datos de la vivienda

Trazado de líneas de precisión vs. Iteración de optimización de la subida de colinas para el conjunto de datos de la vivienda

Más lecturas

Esta sección proporciona más recursos sobre el tema si desea profundizar en él.

Documentos

Artículos

Resumen

En este tutorial, descubriste cómo escalar el conjunto de pruebas para el aprendizaje de la máquina.

Específicamente, aprendiste:

  • Se pueden hacer predicciones perfectas subiendo la colina del conjunto de pruebas sin siquiera mirar el conjunto de datos de entrenamiento.
  • Cómo escalar el conjunto de pruebas para las tareas de clasificación y regresión.
  • Implícitamente escalamos el conjunto de pruebas cuando lo utilizamos en exceso para evaluar nuestros conductos de modelización.

¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.

¡Controla la preparación de los datos modernos!

Preparación de datos para el aprendizaje automático

Prepare sus datos de aprendizaje de la máquina en minutos

…con sólo unas pocas líneas de código pitón…

Descubre cómo en mi nuevo Ebook:
Preparación de datos para el aprendizaje automático

Proporciona Tutoriales de auto-estudio con código de trabajo completo en:
Selección de características, RFE, Limpieza de datos, Transformaciones de datos, Escalado, Reducción de la dimensionalidad,
y mucho más…

Traer las modernas técnicas de preparación de datos a
Sus proyectos de aprendizaje de la máquina

Ver lo que hay dentro