Regresión Lineal en Python

En Python , la regresión se utiliza para encontrar la relación entre variables . En el aprendizaje automático y la modelización estadística, esta relación se utiliza para predecir resultados futuros .

La regresión lineal utiliza la relación entre los puntos de datos para trazar una línea recta a través de ellos. Esta línea se puede utilizar para predecir valores futuros.


Cómo funciona la regresión lineal en Python

Python tiene métodos para encontrar una relación entre puntos de datos y trazar una línea de regresión lineal. Mostraremos cómo usar estos métodos en lugar de profundizar en la fórmula matemática.

En el siguiente ejemplo, el eje x representa la edad y el eje y representa la velocidad. Hemos registrado la edad y la velocidad de 13 automóviles mientras pasaban por una caseta de peaje. Veamos si los datos que recopilamos podrían utilizarse en una regresión lineal:

Ejemplo

    # Importar la biblioteca Matplotlib
import matplotlib.pyplot as plt
# Datos para el diagrama de dispersión
x = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
x = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y = [50, 42, 38, 30, 28, 24, 22, 20, 18, 16]
# Crear el diagrama de dispersión
plt.scatter(x, y)
plt.xlabel("Eje X")
plt.ylabel("Eje Y")
plt.title("Diagrama de Dispersión")
plt.grid(True)
plt.show()
  

Resultado:

diagrama_dispersion_regresion_lineal_python

Explicación del Ejemplo

  • Importamos la biblioteca Matplotlib para trazar gráficos.
  • Creamos dos listas x e y que representan la edad y la velocidad de los automóviles.
  • Dibujamos un diagrama de dispersión para visualizar nuestros datos.

Ejemplo

    plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
  

Resultado:

Regresión lineal python

Explicación del Ejemplo

  • Importamos la biblioteca Matplotlib para trazar gráficos y la biblioteca SciPy para realizar análisis estadísticos.
  • Creamos dos listas x e y que representan la edad y la velocidad de los automóviles.
  • Calculamos la pendiente, la intercepción, el coeficiente de correlación r , el valor p y el error estándar utilizando stats.linregress .
  • Definimos una función myfunc que utiliza la pendiente e intercepción para calcular la velocidad prevista.
  • Creamos un nuevo conjunto de datos mymodel aplicando la función myfunc a cada valor de x .
  • Dibujamos el diagrama de dispersión original y la línea de regresión lineal.

Coeficiente de Correlación (r) en Python

Es importante saber cuál es la relación entre los valores del eje x y los valores del eje y. Si no existe una relación, la regresión lineal no puede utilizarse para predecir nada. Este valor de relación, llamado coeficiente de correlación r , varía de -1 a 1, donde 0 significa que no hay relación y 1 (y -1) significa que está 100% relacionado. Python y el módulo SciPy calcularán este valor por ti, solo tienes que proporcionar los valores x e y .

Ejemplo

    y = [50, 42, 38, 30, 28, 24, 22, 20, 18, 16]
slope, intercept, r, p, std_err = stats.linregress(x, y)
print(r)
print(r)
  

Resultado:

Ejemplo

    -0.9662064783841053

El resultado -0.9662 indica que hay una fuerte relación inversa entre las variables "x" e "y", y esta relación está bastante cerca de ser perfectamente inversa (que sería -1.0). Por lo tanto, puedes utilizar la regresión lineal para hacer predicciones basadas en estos datos.

En resumen, el valor de "r" cerca de -1 sugiere que a medida que "x" aumenta, "y" tiende a disminuir, y viceversa. Esto es lo que se espera de una relación lineal inversa.


Predicción de Valores Futuros en Python

Ahora podemos utilizar la información recopilada para predecir valores futuros.

Ejemplo: Intentemos predecir la velocidad de un automóvil de 10 años de edad.

Para hacerlo, necesitamos la misma función myfunc() del ejemplo anterior:

Ejemplo

    return slope * x + intercept
  

Ejemplo:

Ejemplo

    print(speed)
print(speed)
  

Resultado:

Ejemplo

    30.593939393939394

El resultado que has obtenido, 30.59 (aproximadamente), es el valor predicho para y (la variable dependiente) cuando x (la variable independiente) tiene un valor de 10. En otras palabras, cuando x es igual a 10, se estima que y será aproximadamente igual a 30.59 según la regresión lineal que has realizado en tu conjunto de datos.

Este resultado proviene de un análisis de regresión lineal, que busca encontrar una relación lineal entre las dos variables, x e y . El coeficiente de correlación ( r ) proporciona información sobre cuán fuerte es la relación lineal entre estas variables. En este caso, parece que hay una relación lineal negativa, lo que significa que a medida que x aumenta, y tiende a disminuir. Sin embargo, es importante recordar que la regresión lineal es un modelo simplificado y que otros factores pueden influir en la relación entre las variables.


Ajuste Deficiente

Creemos un ejemplo en el que la regresión lineal no sería el mejor método para predecir valores futuros.

Ejemplo:

Estos valores para los ejes x e y deberían resultar en un ajuste muy deficiente para la regresión lineal:

Ejemplo

    # Calcular valores de la línea de regresión
mymodel = list(map(myfunc, x))
# Graficar los datos y la línea de regresión
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
  

Resultado:

Ajuste regresion lineal python

Coeficiente de Correlación (r) para la Relación

Este ejemplo debería dar como resultado un valor r muy bajo:

Ejemplo

    x = [15, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115]
y = [100, 98, 95, 90, 88, 80, 75, 70, 68, 65, 60, 58, 55, 50, 48, 45, 40, 38, 35, 30]
#
# Realizar una regresión lineal
slope, intercept, r, p, std_err = stats.linregress(x, y)
# Imprimir el coeficiente de correlación (r)
print(r)# Imprimir el coeficiente de correlación (r)
print(r)
  

Resultado:

Ejemplo

    # Importar la biblioteca Matplotlib
import matplotlib.pyplot as plt
# Datos para el diagrama de dispersión
x = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
x = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y = [50, 42, 38, 30, 28, 24, 22, 20, 18, 16]
# Crear el diagrama de dispersión
plt.scatter(x, y)
plt.xlabel("Eje X")
plt.ylabel("Eje Y")
plt.title("Diagrama de Dispersión")
plt.grid(True)
plt.show()

El coeficiente de correlación (r) cuantifica la fuerza y la dirección de la relación entre dos variables. En este caso, el valor de r es -0.9958363917110191, lo que indica una correlación muy fuerte y negativa entre las variables x e y.

Una correlación negativa significa que cuando una variable aumenta, la otra tiende a disminuir. En otras palabras, a medida que los valores de x aumentan, los valores de y tienden a disminuir en una proporción muy cercana.

Dado que r es muy cercano a -1 (cercano a -1 indica una correlación fuerte negativa), esto sugiere que los valores de x e y están altamente inversamente relacionados. En este contexto, esto podría interpretarse como que a medida que x aumenta, y disminuye en casi la misma cantidad.

En resumen, el valor r = -0.9958363917110191 indica una correlación negativa extremadamente fuerte entre las variables x e y en el conjunto de datos proporcionado.

Practica Regresión Lineal en Python en el editor

Pon en práctica lo aprendido con nuestro editor Python interactivo. Cada ejercicio incluye el código de partida y un botón para abrirlo en una nueva pestaña, donde puedes modificarlo y ejecutarlo.

Ejercicio: En el siguiente ejemplo, el

En el siguiente ejemplo, el eje x representa la edad y el eje y representa la velocidad. Hemos registrado la edad y la velocid.

Ejemplo

    # Importar la biblioteca Matplotlib
import matplotlib.pyplot as plt
# Datos para el diagrama de dispersión
x = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y = [50, 42, 38, 30, 28, 24, 22, 20, 18, 16]
# Crear el diagrama de dispersión
plt.scatter(x, y)
plt.xlabel("Eje X")
plt.ylabel("Eje Y")
plt.title("Diagrama de Dispersión")
plt.grid(True)
plt.show()
  
Abrir en editor

Ejercicio: Convertir a lista

En el siguiente ejemplo, el eje x representa la edad y el eje y representa la velocidad. Hemos registrado la edad y la velocid.

Ejemplo

    # Calcular valores de la línea de regresión
mymodel = list(map(myfunc, x))
# Graficar los datos y la línea de regresión
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
  
Abrir en editor

Ejercicio: Realizar una regresión lineal

Es importante saber cuál es la relación entre los valores del eje x y los valores del eje y. Si no existe una relación, la regresión lineal no puede utilizarse para predecir nada.

Ejemplo

    x = [15, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115]
y = [100, 98, 95, 90, 88, 80, 75, 70, 68, 65, 60, 58, 55, 50, 48, 45, 40, 38, 35, 30]
#
# Realizar una regresión lineal
slope, intercept, r, p, std_err = stats.linregress(x, y)
# Imprimir el coeficiente de correlación (r)
print(r)# Imprimir el coeficiente de correlación (r)
print(r)
  
Abrir en editor

Ejercicio: Para hacerlo, necesitamos la misma función

Para hacerlo, necesitamos la misma función myfunc() del ejemplo anterior.

Ejemplo

    plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
  
Abrir en editor

Ejercicio: Usar print()

Para hacerlo, necesitamos la misma función myfunc() del ejemplo anterior.

Ejemplo

    y = [50, 42, 38, 30, 28, 24, 22, 20, 18, 16]
slope, intercept, r, p, std_err = stats.linregress(x, y)
print(r)
  
Abrir en editor

Ejercicio: Recta de regresión lineal

Define una función de predicción con pendiente e intercepto.

Ejemplo

    def predecir(x, slope=2, intercept=1):
    return slope * x + intercept

print(predecir(3))
print(predecir(5, slope=1.5, intercept=0))
  
Abrir en editor

Comprueba lo aprendido

Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.