img 60a7a584b27e3

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:

img 60a7a5836fba7

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.

16hxonENifkzik vYPxl 3Q

Los mejores W y b reducen el costo. Como muestra la siguiente figura, este será el objetivo del modelo de aprendizaje automático.

1B z1FIcNre qgbNJ4gf3Vw

Con el menor costo, mejoramos radicalmente la predicción, representado en la siguiente figura:

1QYrLuZFDRR8LZ6 GkS JDQ

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:

img 60a7a584b27e3

El trazado de la función de costo:

img 60a7a58589ce9

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?

0L59ZuVGf lmtokMc

0HeUDupgn2HT33tPv

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.

Nicolas Bortolotti

Por Nicolas Bortolotti

Profesional especialista en ingeniería Software con título superior en ingeniería de software, fuertes habilidades y experiencia de programación en python, Java, c# y Go (con experiencia basada en desarrollo de proyectos utilizando estas tecnologías) continuo desarrollo de nuevas arquitecturas de software basado en algoritmos y tecnologías para industria líderes con reconocimiento mundial. Especialidades: Desarrollo de Ciclo de Vida de Software, Investigación y Desarrollo, Integración multiplataforma, Proyecto - Equipo de Gestión, Algoritmo de Diseño y Desarrollo, Cloud Computing Architecture, arquitecturas y desarrollo Mobile.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *