Saltar al contenido

Clasificación lineal en Tensorflow – GeeksforGeeks

Capture1 Clasificación lineal en Tensorflow - GeeksforGeeks

En este artículo, usaremos tf.estimator.LinearClassifier para construir y entrenar un modelo en el famoso conjunto de datos del Titanic. Todo esto se hace usando la API de TensorFlow.

Importar bibliotecas

Las bibliotecas de Python nos facilitan el manejo de los datos y la realización de tareas típicas y complejas con una sola línea de código.

  • pandas – Esta biblioteca ayuda a cargar el marco de datos en un formato de matriz 2D y tiene múltiples funciones para realizar tareas de análisis de una sola vez.
  • entumecido – Las matrices Numpy son muy rápidas y pueden realizar grandes cálculos en muy poco tiempo.
  • matplotlib/nacido en el mar – Esta biblioteca se utiliza para dibujar visualizaciones.

Python3

import tensorflow as tf

import tensorflow.feature_column as fc

 

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

 

import warnings

warnings.filterwarnings('ignore')

Importar conjunto de datos

Importamos el conjunto de datos usando la API de Tensorflow para conjuntos de datos y luego lo cargamos en el marco de datos de panda.

Salida:

Capture1 Clasificación lineal en Tensorflow - GeeksforGeeks

Python3

y_train = x_train.pop('survived')

y_val = x_val.pop('survived')

Necesitamos los datos para las columnas categóricas y la columna numérica (continua) en el conjunto de datos por separado para inicializar nuestro modelo de clasificación lineal.

Python3

objects = []

numerics = []

 

for col in x_train.columns:

    if x_train[col].dtype == 'object':

        objects.append(col)

         

    elif x_train[col].dtype == 'int':

        objects.append(col)

         

    else:

        numerics.append(col)

 

print(objects)

print(numerics)

Salida:

['sex', 'n_siblings_spouses', 'parch', 'class', 'deck', 'embark_town', 'alone']
['age', 'fare']

Python3

feat_cols = []

for feat_name in objects:

    vocabulary = x_train[feat_name].unique()

    feat_cols.append(fc.categorical_column_with_vocabulary_list(feat_name,

                                                                vocabulary))

 

for feat_name in numerics:

    feat_cols.append(fc.numeric_column(feat_name,

                                       dtype=tf.float32))

Necesitamos crear una función invocable que se pueda pasar a la función LinearClassifier.

Python3

def make_input_fn(data, label,

                  num_epochs=10,

                  shuffle=True,

                  batch_size=32):

    def input_function():

        ds = tf.data.Dataset

            .from_tensor_slices((dict(data),

                                 label))

        if shuffle:

            ds = ds.shuffle(1000)

        ds = ds.batch(batch_size)

            .repeat(num_epochs)

        return ds

    return input_function

 

 

train_input_fn = make_input_fn(x_train, y_train)

val_input_fn = make_input_fn(x_val, y_val, num_epochs=1, shuffle=False)

Ahora estamos listos para comenzar a entrenar el modelo tf.estimator.LinearClassifier utilizando el enorme conjunto de datos. La clasificación lineal, como sugiere el nombre, es un modelo lineal que se usa para aprender los límites de decisión entre múltiples clases del objeto, pero debe ser lineal y no no lineal, como lo hacemos en el algoritmo SVM.

Modelo de clasificador lineal

Python3

linear_est = tf.estimator.LinearClassifier(feature_columns=feat_cols)

linear_est.train(train_input_fn)

result = linear_est.evaluate(val_input_fn)

 

print(result)

Salida:

{'accuracy': 0.75,
 'accuracy_baseline': 0.625,
 'auc': 0.8377411,
 'auc_precision_recall': 0.7833674,
 'average_loss': 0.47364476,
 'label/mean': 0.375, 'loss': 0.4666896,
 'precision': 0.6666667,
 'prediction/mean': 0.37083066,
 'recall': 0.6666667,
 'global_step': 200}

Aquí podemos ver que el modelo ha sido evaluado en múltiples matrices utilizando el conjunto de datos de validación y la precisión obtenida también es muy satisfactoria.