Regresión lineal simple en #TensorFlow, aprendizaje automático para mayor exactitud

En estadística tradicional un modelo muy utilizado para predicciones, es el modelo de regresión lineal (siempre y cuando los valores permitan aplicar este modelo). En este artículo vamos a tratar de responder una pregunta simple. ¿Un modelo de aprendizaje automático nos puede ayudar a mejorar nuestro estudio de variables? Si necesitas más información sobre el concepto de #RegresionLineal puede utilizar este link.

Para nuestro estudio, vamos a analizar la edad de niños en el eje “x” y la altura de los mismos en el eje “y”. Intentaremos predecir la altura de los niños basada en su edad, aplicando regresión lineal simple. Fuente académica de este ejemplo link.

Vamos a utilizar una planilla de cálculo para explorar la situación de manera tradicional:



Ahora bien, ¿Qué buscamos con el modelo de aprendizaje automático?. Recordando nuestra función lineal nos enfocaremos en W y b.
y = Wx +b
Buscamos aprender para encontrar los mejores W y b. En la siguiente figura se muestra la representación simple de una regresión lineal.

Los mejores W y b reducen el costo. Como muestra la siguiente figura, este será el objetivo del modelo de aprendizaje automático.
Con el menor costo, mejoramos radicalmente la predicción, representado en la siguiente figura:

Nuestro pregunta central: "Vamos a preguntar por la edad y buscamos la respuesta de la altura mejor ajustada"

Llegó la hora de crear el modelo en #TensorFlow:

Valores de ingreso:
X = tf.placeholder(tf.float32, [m, n])
Y = tf.placeholder(tf.float32, [m, 1])


Peso y la perturbación aleatoria:
W = tf.Variable(tf.zeros([n, 1], dtype=np.float32), name="weight")
b = tf.Variable(tf.zeros([1], dtype=np.float32), name="bias")


Modelo Lineal:
with tf.name_scope("linear_Wx_b") as scope:
   activation = tf.add(tf.matmul(X, W), b)


Costo:
with tf.name_scope("cost") as scope:
   cost = tf.reduce_sum(tf.square(activation - Y)) / (2 * m)
   tf.summary.scalar("cost", cost)


Entrenamiento:
with tf.name_scope("train") as scope: 
   optimizer = tf.train.GradientDescentOptimizer(0.07).minimize(cost)

Luego generamos la sesión en #TensorFlow:
with tf.Session() as sess:
   merged = tf.summary.merge_all()
   writer = tf.summary.FileWriter(log_file, sess.graph)
   init = tf.global_variables_initializer()
   sess.run(init)
   for step in range(1500):
      result, _ = sess.run([merged, optimizer], feed_dict={X: np.asarray(train_X), Y: np.asarray(train_Y)})
      writer.add_summary(result, step)

Vamos a iterar 1500 veces el modelo, luego pueden evaluar diferentes configuraciones y desde luego variar el ratio de aprendizaje que por el momento está fijado en 0.07.

print "Prediction for 3.5 years"
predict_X = np.array([3.5], dtype=np.float32).reshape([1, 1])
predict_X = (predict_X - mean) / std
predict_Y = tf.add(tf.matmul(predict_X, W), b)print "Child height(Y) =", sess.run(predict_Y)


Esto nos entrega un valor de 0.9737 (expresa la altura en metros) Pueden validar académicamente la solución del ejercicio en este link.

Aquí la implementación de la solución:

Además incluí #TensorBoard en nuestro estudio para poder analizar:el modelo con más detalles:





El trazado de la función de costo:


Nota: he seleccionado muchos valores y configuraciones estándares, con el objetivo de simplificar la explicación, luego el lector puede modificar a gusto los elementos de estudio.

Si comparamos nuestro estudio inicial utilizando una planilla tradicional y nuestro modelo automático, es evidente que tenemos mucha mayor exactitud con nuestro modelo automático y además toda la escala para ingerir un volumen mayor de datos y crear mejores predicciones. Están listos para más magia?



Licencia Creative Commons
Regresión lineal simple en #TensorFlow, aprendizaje automático para mayor exactitud por Nicolas Bortolotti se distribuye bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.

Entradas más populares de este blog

7 arquetipos #Polymer 1.0 puntos esenciales prácticos

Iniciando la representación de una mobile-web-page pensando en el rendimiento - Parte 1

El mundo no explorado de G+ desde la visión del desarrollo