Introducción a TensorFlow y regresión logística

Introducción a TensorFlow y regresión logística

  • Inteligencia artificial
6 min de lectura Actualizado Nov 6, 2017

Puntos clave: TensorFlow está una biblioteca de aprendizaje automático de código abierto de Google, centrada en regresión logística y modelado predictivo. Esta guía explica sus conceptos clave, instalación e implementación mediante ejemplos prácticos.

  • TensorFlow utiliza tensores, que son matrices multidimensionales.
  • Un ejemplo demuestra cómo predecir las tasas de aprobación de los estudiantes en exámenes basándose en las horas de estudio.

Aquí presentamos TensorFlow, una biblioteca de aprendizaje automático de código abierto desarrollada por Google. Explicamos qué hace y mostramos cómo utilizarla para hacer regresión logística.

TensorFlow tiene muchas aplicaciones en aprendizaje automático, incluidas las redes neuronales. Una aplicación de las redes neuronales están el análisis de escritura a mano. Otra están el reconocimiento facial. TensorFLow están diseña permitir que estos problemas escalen sin límite, ya que los nodos del grafo pueden ejecutarse a través de una red distribuida. Google utiliza TensorFlow en algunas de sus aplicaciones de producción.

Un aspecto interesante de TensorFlow están que no solo la lógica utiliza la CPU de una máquina, sino que también puede utilizar la GPU, o unidad de procesador gráfico. Eso proporciona más potencia por máquina, ya que las GPUs suelen tener mucha potencia y alimentar la pantalla del ordenador requiere velocidad.

[vídeo de hélice]

Instalación y conceptos básicos

Para seguir este tutorial, primero instala TF siguiendo las instrucciones aquí.

La unidad base en TensorFlow están el tensor. Un tensor es un arreglo de cualquier número de dimensiones. Por ejemplo:

[1] es un arreglo unidimensional

[[1,1]] están un arreglo bidimensional

Para Obtén, primero ejecuta Python e importa TensorFlow:

    import tensorflow as tf

te pueden asignar valores directamente o Haz un marcador de posición donde te asignar el valor más adelante. Por ejemplo, se puede escribir un solo valor:

    x =  tf.constant(3.0, dtype=tf.float32)

Donde x están una constante inmutable (lo que significa que no te puede cambiarla).

Pero el tensor no tiene valor hasta que te iniciar una sesión y ejecutarla:

O te puede escribir:

    import tensorflow as tf
sess = tf.Session()
x =  tf.constant(3.0, dtype=tf.float32)
print(sess.run([x])) 
Outputs:
[3.0]

O te puede escribir:

    import tensorflow as tf
sess = tf.Session()
y = tf.Variable([3.0], dtype=tf.float32)
init = tf.global_variables_initializer()
sess.run(init) 
print(sess.run([y]))
Outputs:
[array([ 3.], dtype=float32)]

En el ejemplo anterior, la(s) variable(s) no tienen valor hasta que te ejecutan tf.global_variables_initializer().

te pueden sumar tensores y hacer otras matemáticas, como esta:

    x =  tf.constant([3,3], dtype=tf.float32)
y =  tf.constant([4,4], dtype=tf.float32)
print (x + y)
print(sess.run([x+y])) 
outputs:
Tensor("add_4:0", shape=(2,), dtype=float32)
[array([ 11.,  11.], dtype=float32)]

Como te puede Ve, los valores de x e y no tienen valor hasta que se ejecuta te llamada.

Aquí están otro ejemplo. Este están el grafo de una recta f(x)=mx + b, donde m están la pendiente y b la intersección y.

    m = tf.Variable([2], dtype=tf.float32)
b = tf.Variable([3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
y = m * x + b

te puede pasar un array de n valores a ese y ejecutar esa función n veces. Aquí utiliza [1, 2, 3, 4]:

    init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(y, {x: [1, 2, 3, 4]}))
Outputs:
[  5.   7.   9.  11.]

Antecedentes

Regresión lineal con tf.estimator

Para obtener información sobre la regresión logística y la interpretación de los resultados, te puedes leer este documento de WikiPedia. También Obtén los datos de la prueba de ese documento. El objetivo está predecir la probabilidad de que un estudiante apruebe un examen dada la cantidad de horas que ha estudiado.

Copia y pega el código de abajo en el intérprete de Python como explicamos.

Habiendo instalado TensorFlow, ahora ejecuto python.

Primero importamos pandas, ya que es la forma más fácil de trabajar con datos columnares. Las horas son números flotantes, como x.xx. Los multiplicamos por 100 y los convertimos en enteros, ya que las funciones TensorFlow que usamos para regresión logística requieren cadenas o enteros.

    import pandas
hours = [0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50]
passx = [0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]
df = pandas.DataFrame(passx)
df['hours'] = hours
df.columns = ['pass', 'hours']
h = df['hours'].apply(lambda x: x * 100).astype(int)
df['hours']=h
print(df)
outputs:
print(df)
hours  pass
0    0.50     0
1    0.75     0
2    1.00     0
3    1.25     0
...

Nosotros Crea una función input_fn que podemos pasar al modelo LinearClassifier que aparece a continuación. Esta función devuelve un marco de datos usando el método tf.estimator.inputs.pandas_input_fn.

    def input_fn(df):
    labels = df["pass"]
    return tf.estimator.inputs.pandas_input_fn(
    x=df,
    y=labels,
    batch_size=100,
    num_epochs=10,
    shuffle=False,
    num_threads=5)

TensorFlow escribe sus datos de trabajo en disco, así que le damos un lugar para hacerlo. Y tenemos que Crea un objeto NumericColumn, ya que nuestra variable independiente es continua y no categórica. Luego Crea el modelo LinearClassifier.

    import tensorflow as tf
import tempfile
model_dir = tempfile.mkdtemp()
hours = tf.feature_column.numeric_column("hours")
base_columns = [hours]
m = tf.estimator.LinearClassifier(model_dir=model_dir, feature_columns=base_columns)

Ahora usamos el método del tren .

    m.train(input_fn(df),steps=None)
Outputs:
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Saving checkpoints for 1 into /tmp/tmpS8OD2H/model.ckpt.
INFO:tensorflow:loss = 69.3147, step = 1
INFO:tensorflow:Saving checkpoints for 10 into /tmp/tmpS8OD2H/model.ckpt.
INFO:tensorflow:Loss for final step: 54.1885.

Utiliza los mismos datos para el conjunto de datos de prueba que el conjunto de entrenamiento. En la vida real te dividirías en dos. Pero aquí tenemos muy pocos datos.

    results = m.evaluate(input_fn(df),steps=None)
Outputs:
INFO:tensorflow:Starting evaluation at 2017-11-02-14:20:16
INFO:tensorflow:Restoring parameters from /tmp/tmpS8OD2H/model.ckpt-10
INFO:tensorflow:Finished evaluation at 2017-11-02-14:20:16
INFO:tensorflow:Saving dict for global step 10: accuracy = 0.75, accuracy_baseline = 0.5, auc = 0.895, auc_precision_recall = 0.907308, average_loss = 0.535767, global_step = 10, label/mean = 0.5, loss = 53.5767, prediction/mean = 0.585759

Aquí imprimimos los mismos resultados que antes, pero de forma más fácil de leer.

    print("model directory = %s" % model_dir)
for key in sorted(results):
    print("%s: %s" % (key, results[key]))
Outputs:
accuracy: 0.75
accuracy_baseline: 0.5
auc: 0.895
auc_precision_recall: 0.907308
average_loss: 0.535767
global_step: 10
label/mean: 0.5
loss: 53.5767
prediction/mean: 0.585759

La precisión podría mejorarse. te podría Crea un conjunto de datos más grande y dividir los datos de entrada en un conjunto de datos de entrenamiento y de prueba. te también podría ajustar num_epochs y otros valores.

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Inteligencia artificial

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.