9. Ejemplo entrenamiento y validación(1)
- Hola a todos.Vamos continuar con nuestro curso dedicado al aprendizaje automático.Para ello nos basaremos en un curso de google dedicado a este tema. En este enlace tenéis el curso al completo en castellano: https://developers.google.com/machine-learning/crash-course/ml-intro?hl=es
- En el vídeo anterior vimos como utilizar un conjunto de datos de entrenamiento y otro de prueba. Esto nos permitía entrenar un conjunto de ejemplos y luego probar el modelo con un conjunto de ejemplos diferente. En la siguiente figura tenemos una posible representación gráfica del uso de este enfoque.Donde "Ajustar el modelo" significa modificar cualquier aspecto que puedas imaginar del modelo. Al final de este flujo de trabajo, elegimos el modelo que mejor se desempeñe con respecto al conjunto de prueba.
- Podemos mejorar este enfoque haciendo tres subconjuntos de datos en lugar de dos. Como vemos en la siguiente figura. Este flujo de trabajo mejorado, realiza lo siguiente:
- Selecciona el modelo que mejor se desempeñe con el conjunto de validación.
- Verifica el modelo con respecto al conjunto de prueba.
- Este flujo de trabajo es más eficaz porque crea menos exposiciones al conjunto de prueba.
- Os dejo el vídeo donde vemos un ejemplo de código sobre este tema:
- Como siempre os dejo el código visto en el vídeo:
#Vamos a trabajar con múltiples funciones, así que modularizaremos la lógica para preprocesarlas funciones
from __future__ import print_function
import math
from IPython import display
from matplotlib import cm
from matplotlib import gridspec
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
from sklearn import metrics
import tensorflow as tf
from tensorflow.python.data import Dataset
tf.logging.set_verbosity(tf.logging.ERROR)
pd.options.display.max_rows = 10
pd.options.display.float_format = '{:.1f}'.format
california_housing_dataframe = pd.read_csv("https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv", sep=",")
california_housing_dataframe = california_housing_dataframe.reindex(
np.random.permutation(california_housing_dataframe.index))
def preprocess_features(california_housing_dataframe):
"""Prepara las características de entrada del conjunto de datos de vivienda de California.
Args:
california_housing_dataframe: Contenedor que tendrá los datos de vivienda
Returns:
Un DataFrame que contiene las características que se utilizarán para el modelo.
"""
selected_features = california_housing_dataframe[
["latitude",
"longitude",
"housing_median_age",
"total_rooms",
"total_bedrooms",
"population",
"households",
"median_income"]]
processed_features = selected_features.copy()
# Crea una característica sintética.
processed_features["rooms_per_person"] = (
california_housing_dataframe["total_rooms"] /
california_housing_dataframe["population"])
return processed_features
def preprocess_targets(california_housing_dataframe):
"""Prepara características de destino (etiquetas) a partir del conjunto de datos de viviendas de California.
Args:
california_housing_dataframe: Contenedor que tendrá los datos de vivienda
Returns:
Un DataFrame que contiene la característica de destino.
"""
output_targets = pd.DataFrame()
# Ponemos el objetivo (target) en miles de dolares
output_targets["median_house_value"] = (
california_housing_dataframe["median_house_value"] / 1000.0)
return output_targets
#Para el conjunto de entrenamiento, elegiremos los primeros 12000 ejemplos, de un total de #17000.
training_examples = preprocess_features(california_housing_dataframe.head(12000))
training_examples.describe()
training_targets = preprocess_targets(california_housing_dataframe.head(12000))
training_targets.describe()
#Para el conjunto de validación, elegiremos los últimos 5000 ejemplos, de un total de 17000.
validation_examples = preprocess_features(california_housing_dataframe.tail(5000))
validation_examples.describe()
validation_targets = preprocess_targets(california_housing_dataframe.tail(5000))
validation_targets.describe()
plt.figure(figsize=(13, 8))
ax = plt.subplot(1, 2, 1)
ax.set_title("Conjunto datos validación")
ax.set_autoscaley_on(False)
ax.set_ylim([32, 43])
ax.set_autoscalex_on(False)
ax.set_xlim([-126, -112])
plt.scatter(validation_examples["longitude"],
validation_examples["latitude"],
cmap="coolwarm",
c=validation_targets["median_house_value"] / validation_targets["median_house_value"].max())
ax = plt.subplot(1,2,2)
ax.set_title("Conjunto datos entrenamiento")
ax.set_autoscaley_on(False)
ax.set_ylim([32, 43])
ax.set_autoscalex_on(False)
ax.set_xlim([-126, -112])
plt.scatter(training_examples["longitude"],
training_examples["latitude"],
cmap="coolwarm",
c=training_targets["median_house_value"] / training_targets["median_house_value"].max())
_ = plt.plot()
No hay comentarios:
Publicar un comentario