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.
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:
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
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])
b = tf.Variable(tf.zeros([1], dtype=np.float32), name="bias")
activation = tf.add(tf.matmul(X, W), b)
cost = tf.reduce_sum(tf.square(activation - Y)) / (2 * m)
tf.summary.scalar("cost", cost)
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)
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)})
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.
Además incluí #TensorBoard en nuestro estudio para poder analizar:el modelo con más detalles:
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?
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.
Luego generamos la sesión en #TensorFlow:
with tf.Session() as sess:
merged = tf.summary.merge_all()with tf.Session() as sess:
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:
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)
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:
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?
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.
Comentarios
Publicar un comentario