Paga en 4 cuotas sin intereses de $52.25

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

19d

06h

01m

14s

6

Regresión lineal múltiple con Python y métodos matriciales

La regresión lineal simple es un modelo matemático estadístico para aproximar la relación entre una variable dependiente Y con una variable independiente X. la fórmula se muestra a continuación:

i1.png

Siendo β0 el corte en el eje Y y β1 la pendiente de la recta. Sin embargo, en muchos casos los modelos no se explican únicamente a través de una variable independiente, sino de múltiples factores que representan varias variables independientes. Por ejemplo, supongamos que queremos obtener un modelo que explique la relación que existe entre el número de habitantes de una zona de la ciudad (X1) y la superficie de una tienda de ropa (X2) con las ventas de dicha tienda (Y):

i2.png

En este caso tendremos que hacer uso de la regresión lineal múltiple para abordar problemas de este tipo. Pero, te preguntarás. Si en la regresión lineal simple graficamos en un plano, ¿Como podríamos obtener la solución de un modelo con múltiples variables independientes? Para resolver esto debemos hacer uso de álgebra vectorial para obtener la solución de los parámetros β. Miremos este análisis antes de pasar al código:

Tenemos una serie de mediciones como las siguientes:

i3.png

Para ver de manera matricial obtenemos lo siguiente:

i5.png
i6.png
i4.png

Multiplicando X y β obtenemos lo siguiente:

i7.png

y esta fórmula es muy similar a la de regresión lineal simple ¿verdad?

La matriz que nos interesa es β y su solución es la siguiente (recordemos que conocemos X y Y):
i8.png

No profundizaremos en su demostración.

Nota: La matriz X tiene una columna de unos para compensar β0, este valor en ningún caso se multiplica con ninguna variable independiente.

Ya tenemos todo lo necesario para hacer nuestro programa en Python.

Probemos dos ejemplos, el primero va a ser el ejercicio que se vió en el curso de regresión lineal con Python y el segundo lo solucionaremos con el dataset que mostramos en la parte de arriba.

  1. Ejemplo 1: Regresión lineal simple:
import numpy as np

defdeterminar_b(X, Y):# Llenamos una fila con 1's como en nuestro modelo
    X = np.array([np.ones(len(X)), X]).T
    
    # Devolvemos los datos en un arreglo# Usamos el arroba para realizar multiplicacion matricialreturn np.linalg.inv(X.T @ X) @ X.T @ Y
    

defmain():# Dataset
    x = np.array([1,2,3,4,5])
    y = np.array([2,3,5,6,5])
    
    b = determinar_b(x, y)
    
    for i in range (len(b)):
        print("b{} = {:.3f}".format(i, b[i]))
        
if __name__ == "__main__":
    main()

Al ejecutar el código obtenemos lo siguiente:
i9.png
Que es el mismo resultado que se obtuvo en el curso

  1. Ejemplo 2: Regresión lineal múltiple
    Ahora probemos con el dataset que presentamos al inicio del tutorial:
import numpy as np

defdeterminar_b(X, Y):# Llenamos una fila con 1's como en nuestro modelo
    X = np.insert(X, 0, np.array((np.ones(len(X[0])))), 0).T
    
    # Devolvemos los datos en un arreglo# Usamos el arroba para realizar multiplicacion matricialreturn np.linalg.inv(X.T @ X) @ X.T @ Y
    

defmain():# Dataset
    x = np.array([[90, 105, 85, 92, 130, 80, 100], 
                  [21, 26, 14, 10, 12, 10, 15]])
    y = np.array([198, 219, 167, 167, 250, 150, 218])
    
    b = determinar_b(x, y)
    print("Parámetros b -> {}".format(len(b)))
    
    for i in range (len(b)):
        print("b{} = {:.3f}".format(i, b[i]))

if __name__ == "__main__":
    main()

Al ejecutar el código obtenemos:
i10.png
Si te das cuenta obtuvimos tres valores, esto sucede porque ahora tenemos dos variables independientes x1 y x2 (Habitantes y superficie). Obviamente esto es posible hacerlo con más variables independientes con el fin de modelar sistemas de regresión lineal múltiple más complejos

Ahora expliquemos dos cosas importantes del código:

  1. La siguiente línea de código realiza las operaciones matriciales para obtener el vector b. El arroba es una forma de python para hacer multiplicaciones matriciales, si lo haces con asterisco (*) Python lo toma como una operación aritmética.
return np.linalg.inv(X.T @ X) @ X.T @ Y
  1. Finalmente, si observaste la matriz X en la parte teórica notaste que tenía una columna de unos. Para que nuestro programa agregue automáticamente los unos usamos la siguiente línea:
    Esta línea la usamos cuando tenemos solo una variable independiente
X = np.array([np.ones(len(X)), X]).T

Esta línea se usa cuando hay dos o más variables independiente

X = np.insert(X, 0, np.array((np.ones(len(X[0])))), 0).T
Escribe tu comentario
+ 2