Saltar al contenido

División de la prueba del tren para evaluar los algoritmos de aprendizaje automático

24 de julio de 2020

El procedimiento de división de la prueba del tren se utiliza para estimar el rendimiento de los algoritmos de aprendizaje de la máquina cuando se utilizan para hacer predicciones sobre datos no utilizados para entrenar el modelo.

Es un procedimiento rápido y fácil de realizar, cuyos resultados permiten comparar el rendimiento de los algoritmos de aprendizaje de la máquina para su problema de modelado predictivo. Aunque es sencillo de utilizar e interpretar, hay ocasiones en que el procedimiento no debe utilizarse, como cuando se tiene un conjunto de datos pequeño y situaciones en que se requiere una configuración adicional, como cuando se utiliza para la clasificación y el conjunto de datos no está equilibrado.

En este tutorial, descubrirá cómo evaluar los modelos de aprendizaje de las máquinas utilizando la división de la prueba de tren.

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

  • El procedimiento de división de la prueba del tren es apropiado cuando se tiene un conjunto de datos muy grande, un modelo costoso para entrenar, o se requiere una buena estimación del rendimiento del modelo rápidamente.
  • Cómo usar la biblioteca de aprendizaje de la máquina de aprendizaje para realizar el procedimiento de división de la prueba del tren.
  • Cómo evaluar los algoritmos de aprendizaje de la máquina para la clasificación y la regresión usando la división de la prueba del tren.

Empecemos.

División de la prueba del tren para evaluar los algoritmos de aprendizaje automático

División de la prueba del tren para evaluar los algoritmos de aprendizaje automático

Resumen del Tutorial

Este tutorial está dividido en tres partes; son:

  1. Evaluación de la división de la prueba del tren
    1. Cuándo usar la división de prueba del tren
    2. Cómo configurar la división de la prueba del tren
  2. Procedimiento de división de la prueba del tren en Scikit-Learn
    1. Dividiciones de prueba de trenes repetibles
    2. Estratificación de las divisiones de la prueba del tren
  3. División de la prueba del tren para evaluar los modelos de aprendizaje automático
    1. Tren de prueba para la clasificación
    2. La prueba del tren se divide para la regresión

Evaluación de la división de la prueba del tren

La división de la prueba del tren es una técnica para evaluar el rendimiento del algoritmo de aprendizaje de una máquina.

Puede ser usado para problemas de clasificación o regresión y puede ser usado para cualquier algoritmo de aprendizaje supervisado.

El procedimiento consiste en tomar un conjunto de datos y dividirlo en dos subconjuntos. El primer subconjunto se utiliza para ajustar el modelo y se denomina conjunto de datos de entrenamiento. El segundo subconjunto no se utiliza para entrenar el modelo; en su lugar, se proporciona al modelo el elemento de entrada del conjunto de datos, luego se hacen predicciones y se comparan con los valores esperados. Este segundo conjunto de datos se denomina conjunto de datos de prueba.

  • Conjunto de datos del tren: Se utiliza para ajustar el modelo de aprendizaje de la máquina.
  • Conjunto de datos de la prueba: Se utiliza para evaluar el modelo de aprendizaje de la máquina de ajuste.

El objetivo es estimar el rendimiento del modelo de aprendizaje de la máquina con nuevos datos: datos que no se utilizan para entrenar el modelo.

Así es como esperamos usar el modelo en la práctica. Es decir, para ajustarlo a los datos disponibles con entradas y salidas conocidas, y luego hacer predicciones sobre nuevos ejemplos en el futuro en los que no tenemos los resultados o valores objetivo esperados.

El procedimiento de la prueba del tren es apropiado cuando se dispone de un conjunto de datos suficientemente grande.

Cuándo usar la división de prueba del tren

La idea de «suficientemente grande» es específica para cada problema de modelación predictiva. Significa que hay suficientes datos para dividir el conjunto de datos en conjuntos de datos de tren y de prueba y cada uno de los conjuntos de datos de tren y de prueba son representaciones adecuadas del dominio del problema. Esto requiere que el conjunto de datos original sea también una representación adecuada del dominio del problema.

Una representación adecuada del dominio del problema significa que hay suficientes registros para cubrir todos los casos comunes y la mayoría de los casos no comunes en el dominio. Esto podría significar combinaciones de variables de entrada observadas en la práctica. Puede requerir miles, cientos de miles o millones de ejemplos.

Por el contrario, el procedimiento de prueba del tren no es apropiado cuando el conjunto de datos disponible es pequeño. La razón es que cuando el conjunto de datos se divide en tren y conjuntos de pruebas, no habrá suficientes datos en el conjunto de datos de entrenamiento para que el modelo aprenda un mapeo efectivo de las entradas a las salidas. Tampoco habrá suficientes datos en el conjunto de pruebas para evaluar eficazmente el rendimiento del modelo. El rendimiento estimado podría ser excesivamente optimista (bueno) o excesivamente pesimista (malo).

Si los datos son insuficientes, entonces un procedimiento alternativo de evaluación de modelo adecuado sería el procedimiento de validación cruzada de k-fold.

Además del tamaño del conjunto de datos, otra razón para utilizar el procedimiento de evaluación de la división de la prueba del tren es la eficiencia computacional.

Algunos modelos son muy costosos de entrenar, y en ese caso, la evaluación repetida utilizada en otros procedimientos es intratable. Un ejemplo podrían ser los modelos de redes neuronales profundas. En este caso, se utiliza comúnmente el procedimiento de prueba del tren.

Alternativamente, un proyecto puede tener un modelo eficiente y un vasto conjunto de datos, aunque puede requerir una estimación del rendimiento del modelo rápidamente. Una vez más, el procedimiento de división de la prueba del tren se aborda en esta situación.

Las muestras del conjunto de datos de entrenamiento original se dividen en los dos subconjuntos mediante selección aleatoria. Esto es para asegurar que los conjuntos de datos de entrenamiento y prueba son representativos del conjunto de datos original.

Cómo configurar la división de la prueba del tren

El procedimiento tiene un parámetro de configuración principal, que es el tamaño del tren y los juegos de prueba. Esto se expresa más comúnmente como un porcentaje entre 0 y 1 para el tren o los conjuntos de datos de prueba. Por ejemplo, un conjunto de entrenamiento con un tamaño de 0,67 (67 por ciento) significa que el porcentaje restante 0,33 (33 por ciento) se asigna al conjunto de pruebas.

No hay un porcentaje de separación óptimo.

Debe elegir un porcentaje dividido que cumpla con los objetivos de su proyecto con consideraciones que incluyan:

  • Costo computacional en el entrenamiento del modelo.
  • Costo computacional en la evaluación del modelo.
  • El entrenamiento establece la representatividad.
  • Prueba la representatividad del conjunto.

Sin embargo, los porcentajes comunes de división incluyen:

  • Tren: 80%, Prueba: 20%
  • Tren: 67%, Prueba: 33%
  • Tren: 50%, Prueba: 50%

Ahora que estamos familiarizados con el procedimiento de evaluación del modelo de división de la prueba del tren, veamos cómo podemos usar este procedimiento en Python.

Procedimiento de división de la prueba del tren en Scikit-Learn

La biblioteca de aprendizaje de máquinas Python de scikit-learn proporciona una implementación del procedimiento de evaluación de la división de la prueba del tren a través de la función train_test_split().

La función toma un conjunto de datos cargado como entrada y devuelve el conjunto de datos dividido en dos subconjuntos.

Idealmente, puedes dividir tu conjunto de datos original en entrada (X) y la salida (y), luego llama a la función que pasa por ambas matrices y que se dividan apropiadamente en subconjuntos de tren y de prueba.

Recomendado:  La regla de la cadena de cálculo para funciones univariadas y multivariadas

El tamaño de la división puede ser especificado a través de la «tamaño_de_prueba«que toma un número de filas (entero) o un porcentaje (flotante) del tamaño del conjunto de datos entre 0 y 1.

Este último es el más común, con valores utilizados como el 0,33, donde el 33 por ciento del conjunto de datos se asignará al conjunto de pruebas y el 67 por ciento al conjunto de entrenamiento.

Podemos demostrarlo usando un conjunto de datos de clasificación sintética con 1.000 ejemplos.

El ejemplo completo figura a continuación.

Ejecutando el ejemplo se divide el conjunto de datos en trenes y conjuntos de prueba, y luego se imprime el tamaño del nuevo conjunto de datos.

Podemos ver que 670 ejemplos (67 por ciento) fueron asignados al conjunto de entrenamiento y 330 ejemplos (33 por ciento) fueron asignados al conjunto de pruebas, como especificamos.

Alternativamente, el conjunto de datos puede ser dividido especificando el «tamaño_de_tren» que puede ser un número de filas (entero) o un porcentaje del conjunto de datos original entre 0 y 1, como 0,67 para el 67 por ciento.

Dividiciones de prueba de trenes repetibles

Otra consideración importante es que las filas se asignan al tren y a los conjuntos de pruebas de forma aleatoria.

Esto se hace para garantizar que los conjuntos de datos sean una muestra representativa (por ejemplo, una muestra aleatoria) del conjunto de datos original, que a su vez, debe ser una muestra representativa de las observaciones del dominio del problema.

Cuando se comparan los algoritmos de aprendizaje por máquina, es deseable (tal vez necesario) que se ajusten y evalúen en los mismos subconjuntos del conjunto de datos.

Esto puede lograrse fijando la semilla para el generador de números pseudo-aleatorios utilizado al dividir el conjunto de datos. Si eres nuevo en los generadores de números pseudo-aleatorios, mira el tutorial:

Esto puede lograrse estableciendo el «estado_aleatorio«a un valor entero. Cualquier valor servirá; no es un hiperparámetro sintonizable.

El ejemplo que figura a continuación lo demuestra y muestra que dos divisiones separadas de los datos dan el mismo resultado.

Corriendo el ejemplo se divide el conjunto de datos y se imprimen las primeras cinco filas del conjunto de datos de entrenamiento.

El conjunto de datos se divide de nuevo y las primeras cinco filas del conjunto de datos de formación se imprimen mostrando valores idénticos, lo que confirma que cuando fijamos la semilla para el generador de números pseudoaleatorios, obtenemos una división idéntica del conjunto de datos original.

Estratificación de las divisiones de la prueba del tren

Una última consideración es sólo para los problemas de clasificación.

Algunos problemas de clasificación no tienen un número equilibrado de ejemplos para cada etiqueta de clase. Por ello, es conveniente dividir el conjunto de datos en conjuntos de trenes y pruebas de manera que se conserven las mismas proporciones de ejemplos en cada clase que las observadas en el conjunto de datos original.

Esto se llama una división estratificada de la prueba del tren.

Podemos lograrlo estableciendo el «estratificaral componente «y» del conjunto de datos original. Esto será utilizado por el train_test_split() función para asegurar que tanto el tren como los juegos de prueba tengan la proporción de ejemplos en cada clase que está presente en el «y» matriz.

Podemos demostrarlo con un ejemplo de un conjunto de datos de clasificación con 94 ejemplos en una clase y seis ejemplos en una segunda clase.

Primero, podemos dividir el conjunto de datos en trenes y conjuntos de prueba sin el «estratificar«argumento». El ejemplo completo se enumera a continuación.

Ejecutando el ejemplo primero se reporta la composición del conjunto de datos por etiqueta de clase, mostrando el esperado 94 por ciento contra el 6 por ciento.

Luego se divide el conjunto de datos y se informa de la composición del tren y de los conjuntos de pruebas. Podemos ver que el conjunto de trenes tiene 45/5 ejemplos en el conjunto de pruebas tiene 49/1 ejemplos. La composición del tren y los juegos de prueba difieren, y esto no es deseable.

A continuación, podemos estratificar la división de la prueba del tren y comparar los resultados.

Dado que hemos utilizado una división del 50 por ciento para el tren y los juegos de prueba, esperaríamos que tanto el tren como los juegos de prueba tengan 47/3 ejemplos en el tren/juegos de prueba respectivamente.

Ejecutando el ejemplo, podemos ver que en este caso, la versión estratificada de la división de la prueba del tren ha creado tanto el tren como los conjuntos de datos de prueba con 47/3 ejemplos en los conjuntos de tren/prueba como esperábamos.

Ahora que estamos familiarizados con la train_test_split() función, veamos cómo podemos usarlo para evaluar un modelo de aprendizaje de la máquina.

División de la prueba del tren para evaluar los modelos de aprendizaje automático

En esta sección, exploraremos el uso del procedimiento de división de la prueba del tren para evaluar los modelos de aprendizaje de la máquina en los conjuntos de datos de clasificación estándar y de modelado predictivo de regresión.

Tren de prueba para la clasificación

Demostraremos cómo usar la división de la prueba del tren para evaluar un algoritmo de bosque aleatorio en el conjunto de datos del sonar.

El conjunto de datos del sonar es un conjunto de datos estándar para el aprendizaje de la máquina, compuesto por 208 filas de datos con 60 variables de entrada numéricas y una variable objetivo con dos valores de clase, por ejemplo, la clasificación binaria.

El conjunto de datos implica la predicción de si los retornos del sonar indican una roca o una mina simulada.

No es necesario descargar el conjunto de datos; lo descargaremos automáticamente como parte de nuestros ejemplos de trabajo.

El siguiente ejemplo descarga el conjunto de datos y resume su forma.

Ejecutando el ejemplo se descarga el conjunto de datos y se divide en elementos de entrada y salida. Como era de esperar, podemos ver que hay 208 filas de datos con 60 variables de entrada.

Ahora podemos evaluar un modelo usando una división de prueba de trenes.

Primero, el conjunto de datos cargado debe ser dividido en componentes de entrada y salida.

A continuación, podemos dividir el conjunto de datos para que el 67 por ciento se utilice para entrenar el modelo y el 33 por ciento para evaluarlo. Esta división fue elegida arbitrariamente.

Podemos entonces definir y ajustar el modelo en el conjunto de datos de entrenamiento.

A continuación, utilice el modelo de ajuste para hacer predicciones y evalúe las predicciones utilizando la métrica de rendimiento de la precisión de la clasificación.

A continuación se muestra el ejemplo completo.

Ejecutando el ejemplo primero se carga el conjunto de datos y se confirma el número de filas en los elementos de entrada y salida.

El conjunto de datos se divide en trenes y conjuntos de pruebas y podemos ver que hay 139 filas para el entrenamiento y 69 filas para el conjunto de pruebas.

Finalmente, el modelo se evalúa en el conjunto de pruebas y el rendimiento del modelo al hacer predicciones sobre nuevos datos tiene una precisión de alrededor del 78,3 por ciento.

La prueba del tren se divide para la regresión

Demostraremos cómo usar la división de la prueba del tren para evaluar un algoritmo de bosque aleatorio en el conjunto de datos de la vivienda.

El conjunto de datos de la vivienda es un conjunto de datos estándar de aprendizaje de la máquina compuesto por 506 filas de datos con 13 variables numéricas de entrada y una variable numérica de destino.

El conjunto de datos implica la predicción del precio de la casa, dados los detalles del suburbio de la casa en la ciudad americana de Boston.

No es necesario descargar el conjunto de datos; lo descargaremos automáticamente como parte de nuestros ejemplos de trabajo.

El siguiente ejemplo descarga y carga el conjunto de datos como un Pandas DataFrame y resume la forma del conjunto de datos.

La ejecución del ejemplo confirma las 506 filas de datos y las 13 variables de entrada y las variables objetivo numéricas simples (14 en total).

Ahora podemos evaluar un modelo usando una división de prueba de trenes.

Primero, el conjunto de datos cargado debe ser dividido en componentes de entrada y salida.

A continuación, podemos dividir el conjunto de datos para que el 67 por ciento se utilice para entrenar el modelo y el 33 por ciento para evaluarlo. Esta división fue elegida arbitrariamente.

Podemos entonces definir y ajustar el modelo en el conjunto de datos de entrenamiento.

A continuación, utilice el modelo de ajuste para hacer predicciones y evalúe las predicciones utilizando la métrica de rendimiento del error absoluto medio (MAE).

A continuación se muestra el ejemplo completo.

Ejecutando el ejemplo primero se carga el conjunto de datos y se confirma el número de filas en los elementos de entrada y salida.

El conjunto de datos se divide en tren y conjuntos de prueba y podemos ver que hay 339 filas para el entrenamiento y 167 filas para el conjunto de prueba.

Por último, el modelo se evalúa en el conjunto de pruebas y el rendimiento del modelo al hacer predicciones sobre nuevos datos es un error absoluto medio de unos 2.211 (miles de dólares).