Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
clase:iabd:pia:2eval:tema07.validacion [2024/10/11 13:44] admin [Validación] |
— (actual) | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | ====== 7.c Validación ====== | ||
- | Hasta ahora hemos visto como definir una red neuronal y como entrenarla. El último paso que nos queda es saber si la red ha funcionado correctamente. | ||
- | |||
- | Las métricas son muy parecidas a las funciones de coste pero hay métricas que no existen como función de coste. El muchos casos la métrica será la misma que la función de coste. | ||
- | |||
- | |||
- | En el método '' | ||
- | |||
- | <sxh python> | ||
- | model.compile(loss=" | ||
- | history=model.fit(x, | ||
- | </ | ||
- | |||
- | Para obtener los valores de la métrica en cada época se usa la siguiente línea | ||
- | |||
- | <sxh python> | ||
- | history.history[' | ||
- | history.history[' | ||
- | </ | ||
- | |||
- | |||
- | ===== Validación ===== | ||
- | Acabamos de ver que entrenando la red neuronal , el error se consigue bajar a prácticamente cero. Es decir que los valores de los parámetros , pesos (weight) y sesgos bias, debe ser muy buenos. No exactamente. Resulta que los parámetros se han ajustado a los datos que le hemos pasado, pero ¿Como es de bueno el modelo para nuevos datos que no ha visto? **Realmente ver como se comporta con datos nuevos y con los datos que ha ya visto es lo que nos va a decir como es de bueno nuestro modelo**. Así que pasemos a ver como sacar las métricas también con datos nuevos. | ||
- | |||
- | Lo primero es averiguar de donde obtenemos nuevos datos. Normalmente no tenemos nuevos datos así que lo que hacemos es que solo vamos a entrenar nuestra red neuronal con el 80% de los datos y el 20% restante los guardaremos para validar la red neuronal. Eso lo vamos a hacer con la función [[https:// | ||
- | |||
- | <sxh python> | ||
- | from sklearn.model_selection import train_test_split | ||
- | |||
- | x_train, x_test, y_train, y_test = train_test_split(x, | ||
- | </ | ||
- | |||
- | La función '' | ||
- | * Los primeros arrays son los datos a //dividir// entre los datos de entrenamiento o de validación (//test// en inglés). | ||
- | * '' | ||
- | * '' | ||
- | * retorna los 4 array: | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | Y ahora a Keras se los tenemos que pasar así: | ||
- | |||
- | <sxh python> | ||
- | history=model.fit(x_train, | ||
- | </ | ||
- | |||
- | Lo datos de entrenamiento se pasan igual que antes pero los de validación se pasan en en un tupla en un parámetro llamado '' | ||
- | |||
- | Por último tenemos que obtener la métrica para los datos de validación. Se obtiene igual que antes pero el nombre de la métrica empieza por '' | ||
- | |||
- | <sxh python> | ||
- | history.history[' | ||
- | </ | ||
- | |||
- | Veamos un ejemplo completo: | ||
- | |||
- | <sxh python> | ||
- | import numpy as np | ||
- | import tensorflow as tf | ||
- | import numpy as np | ||
- | import pandas as pd | ||
- | import keras | ||
- | import random | ||
- | from keras.models import Sequential | ||
- | from keras.layers import Dense | ||
- | from sklearn.datasets import load_iris | ||
- | import matplotlib.pyplot as plt | ||
- | from sklearn.model_selection import train_test_split | ||
- | |||
- | iris=load_iris() | ||
- | x=iris.data[0: | ||
- | y_true=iris.target[0: | ||
- | |||
- | np.random.seed(5) | ||
- | tf.random.set_seed(5) | ||
- | random.seed(5) | ||
- | |||
- | x_train, x_test, y_train, y_test = train_test_split(x, | ||
- | |||
- | model=Sequential() | ||
- | model.add(Dense(3, | ||
- | model.add(Dense(1, | ||
- | model.compile(loss=" | ||
- | history=model.fit(x_train, | ||
- | |||
- | figure=plt.figure(figsize=(8, | ||
- | axes = figure.add_subplot() | ||
- | |||
- | axes.plot(history.history[' | ||
- | axes.plot(history.history[' | ||
- | |||
- | axes.legend() | ||
- | axes.set_xlabel(' | ||
- | axes.set_ylabel(' | ||
- | axes.set_facecolor("# | ||
- | axes.grid(b=True, | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | Podemos ver en el gráfico que la métrica es muy similar con los datos de validación que con los de entrenamiento. otro detalle importante es que las métricas suelen ser buenas si su valor es 1 (al contrario de las funciones de pérdida en la que lo bueno era un 0) | ||
- | |||
- | Hemos visto a lo largo del curso que tenemos problemas de regresión y de clasificación, | ||
- | * Problemas de regresión: | ||
- | * [[tema07.metricas_regresion]] | ||
- | * Problemas de clasificación: | ||
- | * [[tema07.metricas]] | ||
- | * [[tema07.metricas_derivadas]] | ||
- | |||