La Ecuacion de la Recta, Explicacion y Programacion en Python [Introduccion al Machine Learning]

in #spanish6 years ago (edited)

¿Que vamos a Aprender aquí?

  • Que es una Recta y como calcularla.
  • Programar un script que pida datos específicos y encuentre la ecuación de la Recta algo interactivo en PYTHON.
  • Para que nos sirve esto en el Machine Learning, ejemplo sencillo y corto.

Hola queridos Steemianos, Como ustedes sabrán mi pasión es la Programación y mi sueño es llegar a programar sistemas de Inteligencia Artificial Avanzados, pero claro para eso falta mucho pero por algo se empieza.

Ya hace algún tiempo intente introducirles en el mundo del Machine Learning donde estoy dando mis Pasos para mejorar mis habilidades y comprensión del tema. Recordando aquella misión fallida donde intente agregar aprendizaje automático 'AA' a nuestro gestor de Trading con Criptomonedas, digo fallida por que no fue acogido como esperaba sin embargo he estado aprendiendo cada Día sobre este mundillo del Machine Learnig o AA todo con la esperanza de poder terminar esa misión

Ahora mismo estoy haciendo un curso de Google que me ha abierto otra alternativa para que podamos comprender y entender mas sobre el tema. Por eso el tema de Hoy LA ecuación de la Recta, si es interesante que la comprensión de esta ecuación en si misma nos abrirá un mundo muy extenso de conocimientos sobre el Tema del Aprendizaje Automático.


Para esto necesitamos cocimientos Reales y fuertes sobre el Tema, entonces que es una RECTA:

LA RECTA o Linea Recta

Una linea Recta en la Geometría que manejamos a diario(Geometría Euclidiana) es una sucesión de puntos que se extiende en una misma dirección.

Ya sabemos que es una Linea Recta, ahora como podríamos ver una linea Recta en un Plano, es decir como podemos entender en la practica que es una linea recta.

En geometría analítica las líneas rectas en un plano pueden ser expresadas mediante una ecuación del tipo y = m x + b, donde x, y son variables en un plano cartesiano. En dicha expresión m  es denominada la "pendiente de la recta" y está relacionada con la  inclinación que toma la recta respecto a un par de ejes que definen el  plano. Mientras que b es el denominado "término independiente" u  "ordenada al origen" y es el valor del punto en el cual la recta corta  al eje vertical en el plano.  

Cita de https://es.wikipedia.org/wiki/Recta

Pero antes habíamos dicho que una Recta esta conformada por puntos y realmente la ecuación anterior solo nos dice 1 punto en el espacio, pero la 'b' es el punto donde corta la recta con el eje 'Y' así que solo puede existir 1 punto de corte por ser una recta y la 'm' es la inclinación, fíjate en la imagen sabiendo eso:

FUENTE: https://ekuatio.com

Entonces con saber 1 solo punto de la recta no hacemos nada, pero si supiéramos el punto de corte con 'Y' podríamos conocer la Recta, claro recuerda que 'b' es un punto de la Recta. y si conseguimos 'b' y tenemos un punto podemos ir a la ecuación 'y = m x + b' y calcular la pendiente o 'm'.

Si partimos de 2 puntos podemos encontrar 'm' con la ecuación: 

Fuente: https://ekuatio.com

Y aparir de los 2 puntos y 'm' podemos encontrar 'b' ya con eso podemos generar una ecuación como esta:

Fuente: https://ekuatio.com

Esta publicación trata sobre la Recta pero si quieres ampliar tus conocimientos puedes visitar este enlace, que me gusto mucho.

Ahora vamos a Programar en Python todo lo aprendido y luego a sumergirnos en un concepto interesante de Machine Learning:

Programando la Ecuación de la Recta Interactivamente:

Imagina un BOT que te pregunte que vas a ingresar, por ejemplo tu le digas 2 puntos, 1 punto y 'b' o 'm' y 1 punto, creo que no se me pasa alguna otra cosa, con estos datos el script te de la ecuación de tu recta , bueno eso es lo que vamos ha hacer pero también podemos agregar puntos y preguntarle a el BOT si esta o no dentro de la RECTA, eso lo haremos en el próximo post para demostrar o comprender algunos conceptos de REGRESIÓN LINEAL. Ahora hagamos el BOT:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

valor_a_ejecutar = input("Que quieres hacer? \n 1) introducir 2 puntos de la recta.... \n 2) introducir  1 punto y 'b' \n 3) introducir  1 punto y 'm' \n  OPCION es:  ")

def funcion_recta(valor, punto1, otros):

    if valor == 1:

        m = (punto1[1] - punto2[1]) / (punto1[0] - punto2[0])

        b0 = punto1[1] -  ( m * punto1[0])

        b1 = punto2[1] -  ( m * punto2[0])

        if b0 == b1:

            b = b1

        else:

            print b0,"   ", b1, "   ESTA MAL"

        ecuacion_recta = "Y = "+str(m)+ " X + "+str(b)

    if valor == 2:

        m = ( (punto1[1] - otros) / punto1[0])

        ecuacion_recta = "Y = "+str(m)+ " X + "+str(otros)

    if valor == 3:

        b = punto1[1] -  ( otros * punto1[0])

        ecuacion_recta = "Y = "+str(otros)+ " X + "+str(b)

    return ecuacion_recta


####

### BLOQUE OPCIÓN  1

if valor_a_ejecutar == 1:

     ### punto1

    punto1 = raw_input("Introduce el Valor de X separado por un espacio del de Y:   ")

    punto1 = punto1.split(" ")

    if len(punto1) == 2:

        punto1 = [int(punto1[0]),int(punto1[1])]

        print "Esta BIEN"

    elif len(punto1) < 2 or len(punto1) > 2 :

        print "Esta MAL"

    else:

        print "Introduce solo numeros separados por espacios"

     ### punto2

    punto2 = raw_input("Introduce el Valor de X separado por un espacio del de Y:   ")

    punto2 = punto2.split(" ")

    if len(punto2) == 2:

        punto2 = [int(punto2[0]),int(punto2[1])]

        print "Esta BIEN"

        ecuacion_recta = funcion_recta(valor_a_ejecutar, punto1, punto2)

    elif len(punto2) < 2 or len(punto2) > 2 :

        print "Esta MAL", len(punto2)

    else:

        print "Introduce solo numeros separados por espacios"

    print "La ecuacion de la recta para estos 2 Puntos ",punto1, " y ", punto2 , "  es: ", ecuacion_recta

####

### BLOQUE OPCIÓN 2

elif valor_a_ejecutar == 2:

     ### punto 1

    punto1 = raw_input("Introduce el Valor de X separado por un espacio del de Y:   ")

    punto1 = punto1.split(" ")

    if len(punto1) == 2:

        punto1 = [int(punto1[0]),int(punto1[1])]

        print "Esta BIEN"

    elif len(punto1) < 2 or len(punto1) > 2 :

        print "Esta BIEN"

    else:

        print "Introduce solo numeros separados por espacios"

     ### valor de b

    valor_b = input("Introduce el Valor de b:  ")

    if float(valor_b) and len(punto1) == 2:

        print "PERFECTO"  

        ecuacion_recta = funcion_recta(valor_a_ejecutar, punto1, valor_b)

    ### Ejecutar

    print "La ecuación de la recta para  b= ", valor_b," y el punto ",punto1 , "  es: ", ecuacion_recta

####

### BLOQUE OPCIÓN 3    

elif valor_a_ejecutar == 3:

     ### punto 1

    punto1 = raw_input("Introduce el Valor de X separado por un espacio del de Y:   ")

    punto1 = punto1.split(" ")

    if len(punto1) == 2:

        punto1 = [int(punto1[0]),int(punto1[1])]

        print "Esta BIEN"

    elif len(punto1) < 2 or len(punto1) > 2 :

        print "Esta BIEN"

    else:

        print "Introduce solo numeros separados por espacios"

     ### valor de m

    valor_m = input("Introduce el Valor de m:  ")

    if float(valor_m) and len(punto1) == 2:

        print "PERFECTO"  

        ecuacion_recta = funcion_recta(valor_a_ejecutar, punto1, valor_m)

    ### Ejecutar

    print "La ecuacion de la recta para m= ", valor_m," y el punto ", punto1, "  es: ", ecuacion_recta

####

###  OPCIÓN NO EXISTE

elif valor_a_ejecutar > 3:

    print "Valor introducido no debe ser mayor a  3, "

####

###  Debe ingresar números   

else:

    print "Valor introducido debe ser un numero ejemplo 3, "


Al Final no quedo muy Pythonico pero es por que quería que se explicara solo!!! No quise crear casos o case ni introducir whiles o try y except esto lo haré en la próxima entrada que haremos este código mas limpio.

La salida del programa para los 3 casos es:

Para la primera opción metiendo los datos correctos:

Fuente Imagen Screenshot y modificado con Gimp

Para la segunda opción metiendo los datos correctos:


Fuente Imagen  Screenshot y modificado con Gimp

Para la tercera opción metiendo los datos correctos:

Fuente Imagen  Screenshot y modificado con Gimp

Quizás el lunes explique linea a linea si les gusta claro! tiene errores ortográficos el código pero no quiero que tengan problemas con los acentos, aunque puse utf-8.

Para que nos sirve esto en el Machine Learning?

Una recta es solo el principio de la regresión lineal, en Machine Learning o Aprendizaje Automático se manejan temas como Regresión lineal y predicción de algunos datos. Por ejemplo de acuerdo a una zona especifica se podría buscar el precio de una casa de X metros cuadrados, sabiendo que casas como esta se vendieron por X Precio, con solo saber la cantidad de metros cuadrados tendríamos el precio con una simple tabla, pero podríamos agregar muchos mas datos o variables, por ejemplo distancia a el Súper Mercado, Distancia a la Panadería, Año de Construcción, Distancia de la Escuela mas Cercana, Distancia a X cosas, podríamos agregar 100 variables mas y ya una simple tabla no nos serviría.

Pero un programa sencillo si nos serviría, pero imagina que este programa pueda entrenarse con todas estas variables y luego si le faltaren de las 100 variables 50 pudiera decirte casi exactamente cuanto debería costar la casa, suena bien verdad?

Ahora imagina usar este mismo programa entrenado con datos de las Criptomonedas este programa se convertiría en un Buen Gestor o Broker, pero para que necesita una simple recta, sencillo, fíjate:

Las Criptomonedas cambian con el Tiempo, según Días de la Semana, Horas de la Semana, Cambian su precio por el Volumen del Mercado o de X mercados, por noticias sobre esos mercados, sobre países, en fin muchas variables pero estas variables no trazan una linea Recta si no mas Bien Curvas según cada cuanto tiempo se le mida. Entonces necesitamos muchas Rectas y luego promediarlas para conocer la mejor recta y así entrenar al Programa para incluso cambiar la Recta que generemos con el tiempo, haciéndolo capaz de adelantarse y predecir con exactitud de digamos un 70% si sube o baja en los próximos 5, 10 , 30 , 60 o X minutos.

Ya creo que es Bastante información para un Solo día, en la próxima entrada sobre este tema les dejare algunos ejercicios con ejemplos Reales.

Fuente Código:

El código es mio, siéntase libre de usarlo bajo la licencia GPL3

Fuente de las Imágenes:

https://ekuatio.com

Fuente de algunas ideas:

Parte de la Información la saque de aquí:

https://ekuatio.com/como-calcular-la-ecuacion-de-una-recta/

https://es.wikipedia.org/wiki/Recta

http://www.montereyinstitute.org/courses/DevelopmentalMath/U13L2T2_RESOURCE/U13_L2_T2_text_final_es.html


Dios Bendiga a Venezuela, Gracias por pasar por aquí y leer, pero deja tu comentario por cualquier duda, Saludos

Sort:  

Muy buen post informativo y como leí por tus respuesta, "Mientras lo explicas lo aprendes mas y crecen tus perspectiva". Me alegra también ese cierre del post. Dios bendiga a Venezuela. Amén. Gracias por levantar en alto nuestro gentilicio. Venezolanos en Familia, te deja este pequeño aporte. Saludos y que continúen los éxitos....

Muchas Gracias amigo, aprecio mucho que a la gente le sirva lo que hago...
Y bueno lo de Dios Bendiga a Venezuela es por que hoy día maldicen mucho a nuestro país y no hay nada mejor que Dios Bendiga a Venezuela no importa cuanto la maldiga la gente Venezolanos y de otros países si Dios esta con Venezuela nos levantara..
Dios te Bendiga Hermano y Gracias

Este es un tema que tenía semanas tratando de comprender, y por fin encontré una explicación que despejara mis incógnitas y dudas. Te seguiré para ver cuando subas el post con ejemplos reales. Gracias por tu tiempo.

Vaya esto me alegra mucho amigo, pronto subo la segunda parte y ademas hay un curso básico en Google en el próximo Post dejo el link que no lo tengo a la mano... Muchas gracias, me alegra te que te haya servido :D
Saludos

Estas trabajando duro amigo @sethroot, gracias por tanto esfuerzo y contribución para otras personas.

Si ha sido un trabajo duro, y mientras explico un poco lo aprendido, fijo mas los conocimientos y pienso en ellos de una mejor perspectiva... muchas gracias amiga :D

Coin Marketplace

STEEM 0.16
TRX 0.13
JST 0.027
BTC 58994.66
ETH 2596.74
USDT 1.00
SBD 2.43