Aprendizaje automático - Entrenamiento/ prueba

Evaluar el modelo

En el aprendizaje automático, creamos modelos para predecir los resultados de ciertos eventos, como cuando, en el capítulo anterior, predijimos las emisiones de dióxido de carbono de los autos al conocer el peso y el volumen del motor.

Para medir si el modelo es lo suficientemente bueno, podemos usar un método llamado entrenamiento/evaluación.

¿Qué es el entrenamiento/evaluación?

El entrenamiento/evaluación es un método para medir la precisión del modelo.

Se llama entrenamiento/evaluación porque dividimos el conjunto de datos en dos grupos: conjunto de entrenamiento y conjunto de prueba.

80% se utiliza para entrenar y 20% para probar.

Puede usar el conjunto de entrenamiento para entrenar el modelo.

Puede usar el conjunto de prueba para probar el modelo.

Entrenar el modelo significa crear el modelo.

Probar el modelo significa probar la precisión del modelo.

Comienza con el conjunto de datos.

Comienza con el conjunto de datos que se va a probar.

Nuestro conjunto de datos muestra 100 clientes de la tienda y sus hábitos de compra.

Ejemplo

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
plt.scatter(x, y)
plt.show()

Resultados:

El eje x representa el número de minutos antes de la compra.

El eje y representa la cantidad de dinero gastado en la compra.


Ejecutar ejemplo

Dividir entrenamiento/test

El conjunto de entrenamiento debe ser una elección aleatoria del 80% de los datos originales.

El conjunto de prueba debe ser el 20% restante.

train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]

Mostrar el conjunto de entrenamiento

Mostrar el gráfico de dispersión igual al conjunto de entrenamiento:

Ejemplo

plt.scatter(train_x, train_y)
plt.show()

Resultados:

Se parece al conjunto de datos original, por lo que parece ser una elección razonable:


Ejecutar ejemplo

Mostrar el conjunto de prueba

Para asegurarnos de que el conjunto de prueba no sea completamente diferente, también debemos ver el conjunto de prueba.

Ejemplo

plt.scatter(test_x, test_y)
plt.show()

Resultados:

El conjunto de prueba también se parece al conjunto de datos original:


Ejecutar ejemplo

Ajustar el conjunto de datos

¿Cómo es el conjunto de datos? Creo que el ajuste más adecuado es la regresión polinómica, por lo que dibujemos una línea de regresión polinómica.

Para dibujar una línea a través de los puntos de datos, utilizamos el módulo matplotlib plott() Método:

Ejemplo

Dibujar una línea de regresión polinómica que pasa por los puntos de datos:

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
myline = numpy.linspace(0, 6, 100)
plt.scatter(train_x, train_y)
plt.plot(myline, mymodel(myline))
plt.show()

Resultados:


Ejecutar ejemplo

Este resultado puede respaldar nuestra recomendación de ajuste polinómico al conjunto de datos, incluso si intentamos predecir valores fuera del conjunto de datos, nos dará algunos resultados curiosos. Por ejemplo: esta línea indica que un cliente pasa 6 minutos comprando en la tienda, completará una compra de 200 unidades. Esto podría ser un signo de sobreajuste.

Pero ¿qué hay del score de R-squared? El score de R-squared indica muy bien el grado de ajuste de mi conjunto de datos al modelo.

R2

¿Recuerdas R2, también conocido como R cuadrado (R-squared)?

que mide la relación entre el eje x y el eje y, con un rango de valores de 0 a 1, donde 0 significa que no hay relación y 1 significa que hay una relación completa.

El módulo sklearn tiene un nombre rs_score() Este método, que nos ayudará a encontrar esta relación.

Aquí, queremos medir la relación entre el tiempo que los clientes pasan en la tienda y cuánto dinero gastan.

Ejemplo

¿Cómo es la capacidad de ajuste de nuestros datos de entrenamiento en la regresión polinómica?

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
r2 = r2_score(train_y, mymodel(train_x))
print(r2)

Ejecutar ejemplo

Notas:El resultado 0.799 muestra una buena relación.

Introducción del conjunto de prueba

Ahora, al menos en términos de datos de entrenamiento, hemos construido un modelo bastante bueno.

Luego, utilizaremos datos de prueba para probar el modelo para verificar si proporciona resultados similares.

Ejemplo

Determinemos la puntuación R2 al usar datos de prueba:}

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
r2 = r2_score(test_y, mymodel(test_x))
print(r2)

Ejecutar ejemplo

Notas:El resultado 0.809 indica que el modelo también es adecuado para el conjunto de prueba, y estamos seguros de que podemos usar este modelo para predecir valores futuros.

Valor predicho

Ahora que hemos determinado que nuestro modelo es bueno, podemos comenzar a predecir nuevos valores.

Ejemplo

¿Cuánto dinero gastará el cliente si se queda 5 minutos en la tienda?

print(mymodel(5))

Ejecutar ejemplo

Este ejemplo predice que el cliente gastó 22.88 dólares, lo que parece corresponder con el gráfico: