Skip to content

Tensor4Dummies/3_Regresion_Lineal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 

Repository files navigation

3_REGRESIÓN_LINEAL

Introducción

La regresión lineal es una técnica estadística utilizada para medir la relación entre variables. Su interés radica en que el algoritmo que lo implementa no es complejo conceptualmente, y además se adapta a una amplia variedad de situaciones.
Es un modelo matemático usado para aproximar la relación de dependencia entre una variable dependiente Y, las variables independientes Xi y un término aleatorio ε. Este modelo puede ser expresado como: formula
Donde:
Y: variable dependiente, explicada o regresando.
X: variables explicativas, independientes o regresores.
B: parámetros, miden la influencia que las variables explicativas tienen sobre el regrediendo.
Donde B0 es la intersección o término "constante", las Bi son los parámetros respectivos a cada variable independiente, y p es el número de parámetros independientes a tener en cuenta en la regresión.

La regresión lineal se usa para hacer predicción de variables cuantitativas, principalmente, y, aunque pueda parecer una técnica simple, sigue estando vigente pues se puede aplicar de forma sencilla a multitud de problemas. Además, sirve como punto de entrada para definir técnicas más complejas y sofisticadas dentro del análisis de regresión.

Tipos de modelos de Regresión Lineal

Regresión Lineal Simple

formula1

  • Permite determinar cuales son los coeficientes b0 y b1 que relacionan linealmente la variable de entrada (X) con la variable de salida (Y).
  • El coeficiente b0 o constante es el valor que toma la variable de salida (Y) cuand la variable de entrada (X) vale 0.
  • El coeficiente b1 multiplica a la variable de entrada (X) y por tanto va a determinar la inclinación de la recta. A mayor b1 la recta tendrá una mayor inclinación y por tanto pequeños cambios en la variable de entrada (X) generan cambios grandes en la variable de salida (Y).

grafica

  • Hay infinitas posibles rectas por lo que se necesita encontrar aquella que minimice las distancias entre los valores observados y los predichos por la ecuación.
  • Esta recta se obtiene mediante un proceso matemático conocido como mínimos cuadrados.

Regresión Lineal Múltiple

  • Sigue el mismo modelo que la regresión lineal simple solo que ampliamos la ecuación, en vez de tener una variable de entrada o predictora, tenemos multiples.
  • Esto nos va a ofrecer la ventaja de utilizar más información en la construcción del modelo y, consecuentemente, realizar estimaciones más precisas.

ecuacion1

  • En definitiva, y al igual que en regresión lineal simple, vamos a considerar que los valores de la variable dependiente Y han sido generados por una combinación lineal de los valores de una o más variables explicativas y un término aleatorio.
  • Los coeficientes son elegidos de forma que la suma de cuadrados entre los valores observados y los pronosticados sea mínima, es decir, que se va a minimizar la varianza residual.
  • Esta ecuación recibe el nombre de hiperplano, pues cuando tenemos dos variables explicativas, en vez de recta de regresión tenemos un plano.
  • Con tres variables explicativas tendríamos un espacio de tres dimensiones, y así sucesivamente.

grafica

Ejemplo Regresión Lineal

Veamos ahora un ejemplo de regresion lineal simple. Para ello tomamos los valores indicados en la tabla de abajo donde podemos observar las ventas de un producto "x" durante los primeros seis meses del año, y con estos datos intentaremos hallar el pronostico del mes de Julio.

Tabla

El primer paso será hallar la pendiente, para ello efectuaremos los siguientes cálculos:

operacion1

Posteriormente, y con el valor de la tendiente en la variable b procedemos a calcular el valor de a:

operacion2

por último determinamos el pronostico de ventas para el mes de Julio:

operacion3

Podemos así determinar que el pronóstico de ventas para el período 7 es equivalente a 13067 unidades.

grafica

Ejemplo en Tensorflow

Una vez visto un ejemplo práctico vamos a implementar un ejemplo en Tensoflow, tomaremos para ello los datos del ejemplo anterior. Usaremos Python y la librería de TensorFlow, además de la librería NumPy para realizar algún cálculo más complejo y la librería MatPlotLib, para poder ver el resultado final de manera gráfica.

Importación de librerias

El primer paso será importar las librerias que necesitamos utilizar durante el programa.

import tensorflow as tf
import numpy
import math
import matplotlib.pyplot as plt
rng = numpy.random

Declaración de las variables

El siguiente paso será declarar las variables que vamos a usar. En un primer grupo declararemos el gradiente de aprendizaje, las iteraciones que se darán como aprendizaje, cada cuanto se mostrarán y por último el número de meses de los que tenemos información(este último se puede omitir).

# Parametros
gradiente_aprendizaje = 0.1
iteraciones= 100
display_step = 1
meses = 6

A continuación definimos los datos a entrenar train_X serán los meses y train_Y el número de ventas realizadas por mes. Por último tomaremos el tamaño de uno de estos arrays para saber el número de datos que tenemos.

#Definir los datos de entrenamiento (train)
train_X = numpy.asarray([1,2,3,4,5,6])
train_Y = numpy.asarray([7000,9000,5000,11000,10000,13000])
n_samples = train_X.shape[0] #tamaño del array

Comprobación datos introducidos

En este apartado comprobamos gráficamente los datos que se tiene en el momento de llevar el estudio a cabo.

#Visualización de los datos
plt.plot(train_X, train_Y, "ro") #ro =rojo O
plt.xlabel("Mes")
plt.ylabel("Ventas")
plt.show()

grafica

Preparación del resto de datos antes del entreno.

Seguidamente crearemos los Placeholders (explicados en el apartado 1_Tensores). Asignamos valores aleatorios a las variables de entreno, se contruye el modelo lineal, calculamos la media del error de los cuadrados y el descenso de gradiente y por último inicializamos las variables.

#Creamos los Placeholders
X = tf.placeholder("float", name="Mes")
Y = tf.placeholder("float", name="Ventas")

# Creamos las variables de entreno
W = tf.Variable(rng.randn(), name="peso")
b = tf.Variable(rng.randn(), name="parciales")

# Construimos el modelo lineal
pred = tf.add(tf.multiply(X, W), b)

# Calculamos la media del error cuadrado
cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)

#  Calculamos el descenso de gradiente
optimizer = tf.train.GradientDescentOptimizer(gradiente_aprendizaje).minimize(cost)

# Inicializamos las variables
init = tf.global_variables_initializer()

Entrenamiento

Como vamos a usar Tensorflow lo primero que haremos sera crear la sesión y dentro de ella lanzar el inicializador de las variables.

with tf.Session() as sess:

    # ejecutamos el inicializador
    sess.run(init)

Lo siguiente que haremos sera ajustar los datos de entrenamiento:

    # Ajustamos datos de entrenamiento
    for epoch in range(iteraciones):
        for (x, y) in zip(train_X, train_Y):
            sess.run(optimizer, feed_dict={X: x, Y: y})

Dejamos un registro (log) en el terminal de los valores entrenados y sus resultados:

        # Mostramos en pantalla los registros por cada paso (log)
        if (epoch+1) % display_step == 0:
            c = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
            print("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(c), \
                "W=", sess.run(W), "b=", sess.run(b))
    print("Optimización finalizada!")
    training_cost = sess.run(cost, feed_dict={X: train_X, Y: train_Y})
    print("Training cost=", training_cost, "W=", sess.run(W), "b=", sess.run(b), '\n')

Por último mostramos la recta de regresión calculada.

    # Mostramos resultados
    plt.plot(train_X, train_Y, 'ro', label='Datos Originales')
    plt.xlabel("Mes")
    plt.ylabel("Ventas")
    plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Recta de regresion')
    plt.legend()
    plt.show()

regresion

Ejemplo datos aleatorios

A continuación vemos un ejemplo con datos generados aleatoriamente donde en un rango de variables fijas de 1 a 49 se han otorgado aleatoriamente valores.

regresion

Una vez generados los valores procedemos a entrenarlos para obtener así la recta de regresión.

regresion

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages