Path: blob/master/site/es-419/tutorials/estimator/linear.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
Creación de un modelo lineal con estimadores
Advertencia: Los estimadores no se recomiendan para código nuevo. Los estimadores ejecutan el código de estilo
v1.Session
que es más difícil de escribir correctamente y que puede tener un comportamiento inesperado; particularmente, cuando se combina con código TF 2. Los estimadores están incluidos dentro de nuestras garantías de compatibilidad, pero no se les harán correcciones a menos que se trate de vulneraciones a la seguridad. Para más detalles, consulte la Guía de migración.
Descripción general
Esta guía completa, paso a paso, entrena al modelo de regresión logística con la API tf.estimator
. Por lo general, el modelo se usa como base de referencia para otros algoritmos más complejos.
Nota: hay un ejemplo de regresión logística de Keras disponible y se recomienda en este tutorial.
Preparar
Carga del conjunto de datos (dataset) del Titanic
Usará el conjunto de datos del Titanic con el objetivo (admitamos que, algo morboso) de predecir la supervivencia de los pasajeros según características como el género, la edad, la clase social, etc.
Exploración de los datos
El conjunto de datos contiene las siguientes características
Hay 627 y 264 ejemplos en los conjuntos de entrenamiento y evaluación respectivamente.
La mayoría de los pasajeros tienen más de 20 (entre 20 y 29) o más de 30 (entre 30 a 39) años.
La cantidad de pasajeros masculinos a bordo es, aproximadamente, el doble que la de pasajeros femeninos.
La mayoría de los pasajeros son de "segunda" clase.
Las mujeres tiene muchas más posibilidades de sobrevivir que los hombres. Claramente, se trata de una característica predictiva del modelo.
Ingeniería de características para el modelo
Advertencia: El módulo tf.feature_columns descripto en este tutorial no se recomienda para código nuevo. Las capas de procesamiento Keras incluyen esta funcionalidad. Para acceder a las instrucciones de migración, consulte la guía de características de migración. El módulo tf.feature_columns fue diseñado para ser usado con estimadores TF1. Está incluido dentro de nuestras garantías de compatibilidad, pero no se le harán correcciones a menos que se trate de vulneraciones a la seguridad.
Para los estimadores se usa un sistema denominado columnas de atributos (feature columns) a fin de describir cómo debe interpretar el modelo cada uno de los atributos de entrada en bruto. Un estimador espera un vector de entradas numéricas y las columnas de atributos describen cómo el modelo debería convertir cada atributo.
Seleccionar y elaborar el conjunto correcto de columnas de atributos es la clave para entrenar un modelo efectivo. Una columna de atributos puede ser una lista de entradas en bruto en los atributos originales dict
(una columna de atributos base), o cualquier columna nueva creada con las transformaciones definidas sobre una o varias columnas base (una columna de atributos derivados).
El estimador lineal usa tanto los atributos numéricos como los categóricos. Las columnas de atributos funcionan con todos los estimadores de TensorFlow y su propósito es el de definir los atributos usados para crear el modelo. Además, habilitan algunas capacidades de ingeniería de características como la codificación one-hot, la normalización y los datos agrupados (bucketización).
Columnas de atributos base
El código input_function
especifica cómo se convierten los datos a una tf.data.Dataset
que alimenta a la canalización de entrada en forma de transmisión (streaming). tf.data.Dataset
puede recibir muchas fuentes como un marco de datos (dataframe), un archivo con formato CSV y muchas más.
Se puede inspeccionar el conjunto de datos:
También se pueden inspeccionar los resultados de una columna de atributos específicos con la capa tf.keras.layers.DenseFeatures
:
DenseFeatures
solamente admite tensores densos, para inspeccionar una columna categórica deberá transformarla primero en columna indicadora
Después de agregar todos los atributos base al modelo, entrenemos al modelo. El entrenamiento de un modelo es, sencillamente, un solo comando con la API the tf.estimator
API:
Columnas de atributos derivados
Ahora, ha llegado a una exactitud del 75%. Con las columnas de atributos base por separado puede no ser suficiente para explicar los datos. Por ejemplo, la correlación entre la edad y la etiqueta pueden ser diferentes cuando los géneros son diferentes. Por lo tanto, si solamente se entrena un solo peso del modelo para gender="Male"
(género: hombre) y gender="Female"
(género: mujer), no se capturarán todas las combinaciones de edad y género (p. ej., distinguir entre gender="Male"
(género: hombre) Y age="30"
(edad: 30) Y gender="Male"
(género: hombre) Y age="40"
) (edad: 40).
Para aprender las diferencias entre distintas combinaciones de atributos, puede agregar columnas de atributos cruzados al modelo (también se puede agrupar (bucketizar) la columna de edades antes de la columna cruzada):
Después de agregar el atributo de combinación al modelo, volvamos a entrenar el modelo:
Ahora logra una exactitud del 77.6 %, algo un poco mejor que con el entrenamiento solamente con atributos base. Se puede intentar usar más atributos y transformaciones para ver si es posible mejorar.
Este es el momento en que se puede usar el modelo entrenado para hacer predicciones sobre uno de los pasajeros del conjunto en evaluación. Los modelos TensorFlow están optimizados para hacer predicciones de un lote, una recopilación o de varios ejemplos a la vez. Antes, eval_input_fn
se definió usando el conjunto completo en evaluación.
Finalmente, observe la Característica Operativa del Receptor (ROC) de resultados, que nos dará una mejor idea del equilibrio (tradeoff) entre la tasa de verdaderos positivos y la tasa falsos positivos.