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:
Explicación del Ejemplo
- Importamos la biblioteca Matplotlib para trazar gráficos.
-
Creamos dos listas
xeyque 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:
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
xeyque 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 utilizandostats.linregress. -
Definimos una función
myfuncque utiliza la pendiente e intercepción para calcular la velocidad prevista. -
Creamos un nuevo conjunto de datos
mymodelaplicando la funciónmyfunca cada valor dex. - 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:
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()
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()
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)
Ejercicio: Para hacerlo, necesitamos la misma función
Para hacerlo, necesitamos la misma función myfunc() del ejemplo anterior.
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)
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))
Comprueba lo aprendido
Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.