top of page
  • Foto del escritorEsteban Madrigal

Hablemos de la regresión lineal con Python

La regresión lineal es una técnica ampliamente utilizada en el análisis de datos para modelar la relación entre dos variables. Se aplica en situaciones donde se quiere predecir una variable dependiente en función de una o más variables independientes. Por ejemplo, se puede utilizar para predecir el precio de una casa en función de su tamaño o para predecir la cantidad de ventas en función del presupuesto publicitario.


Python es un lenguaje de programación ampliamente utilizado en el campo de la ciencia de datos y ofrece varias librerías, como scikit-learn, que implementan modelos de regresión lineal de manera eficiente y conveniente. Esto permite a los científicos de datos y los ingenieros implementar y evaluar modelos de regresión lineal en una variedad de aplicaciones.


La forma general de una regresión lineal es:






Donde:


Y: Es la variable dependiente.

x1, x2, ..., xn: son las variables independientes.

β0, β1, β2, ..., βn: Los coeficientes son los valores que multiplican a las variables independientes en la ecuación de la línea recta. Estos coeficientes determinan la inclinación y la intercepción de la línea recta.

ε: El error mide la diferencia entre los valores reales de la variable dependiente y los valores predichos por el modelo.


Tipos de regresiones


1. Ordinary Least Squares (OLS):

Es una técnica de regresión lineal que busca minimizar la suma de los cuadrados de las diferencias entre los valores reales y los valores predichos.


2. Ridge Regression:

Es una técnica de regresión lineal que busca minimizar la suma de los cuadrados de las diferencias entre los valores reales y los valores predichos, además de agregar un término de penalización que limita el crecimiento de los coeficientes.


3. Lasso Regression:

Es una técnica de regresión lineal que busca minimizar la suma de los cuadrados de las diferencias entre los valores reales y los valores predichos, además de agregar un término de penalización que limita la magnitud de los coeficientes.


4. Elastic Net Regression:

Es una técnica de regresión lineal que combina las técnicas de Ridge y Lasso y busca minimizar la suma de los cuadrados de las diferencias entre los valores reales y los valores predichos, además de agregar un término de penalización que limita tanto la magnitud de los coeficientes como el crecimiento de estos.


5. Least Angle Regression (LARS):

Es un algoritmo de selección de características para la regresión lineal que busca encontrar el subconjunto óptimo de variables explicativas mediante un proceso iterativo de selección de características y ajuste de coeficientes. LARS es una alternativa eficiente a otras técnicas de selección de características como la eliminación hacia atrás o hacia adelante y es especialmente útil cuando hay una gran cantidad de variables explicativas o cuando existe colinealidad entre ellas.


Realizar una regresión lineal en Python


Para realizar una regresión lineal en Python, podemos utilizar la biblioteca scikit-learn. En primer lugar, debemos importar los datos y separarlos en variables independientes y dependientes. A continuación, debemos importar la clase de regresión lineal de scikit-learn y entrenar el modelo con los datos. Finalmente, debemos evaluar el modelo y hacer predicciones sobre la variable dependiente.


Veámoslo con un ejemplo. Para realizar una regresión lineal en Python, seguiremos los siguientes pasos:


1. Importar las bibliotecas necesarias

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error
  • pandas para la manipulación de datos.

  • numpy para el procesamiento numérico.

  • seaborn para la visualización de datos.

  • matplotlib.pyplot para crear gráficos.

  • train_test_split desde sklearn.model_selection para dividir los datos en entrenamiento y prueba.

  • LinearRegression desde sklearn.linear_model para implementar el modelo de regresión lineal.

  • r2_score y mean_squared_error desde sklearn.metrics para calcular la precisión del modelo y el error cuadrático medio.


2. Cargar los datos en un dataframe de pandas

df = pd.read_csv("/content/regresion.csv")

x = df.drop("medv", axis=1)
y = df["medv"]

Se carga el conjunto de datos desde un archivo CSV utilizando pandas y se lee en un DataFrame llamado "df". Luego, se asignan las variables independientes a la variable "x" y la variable dependiente a la variable "y". La función drop de pandas se utiliza para eliminar la columna "medv" de "df" y asignarla a "y". La opción axis=1 indica que la columna se eliminará en el eje 1, que es el eje de las columnas. De esta manera, "x" contiene solo las variables independientes y "y" contiene la variable dependiente.


3. Dividir los datos en dos partes: entrenamiento y prueba:


x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1)  

Realiza una división de los datos de entrada para entrenamiento y prueba en el aprendizaje automático. La función "train_test_split" es una función de la biblioteca scikit-learn de Python, que se utiliza para dividir los datos en dos grupos, uno para entrenamiento y otro para prueba.


Los argumentos que se pasan a la función son:


x: los datos de entrada

y: las etiquetas correspondientes a los datos de entrada

test_size: la fracción de los datos que se utilizarán para prueba, en este caso, se establece en 0.3, lo que significa que se utilizará el 30% de los datos para pruebas y el 70% restante para entrenamiento.

random_state: una semilla pseudoaleatoria para controlar la aleatoriedad del proceso de división. Al establecer random_state=1, se asegura que los mismos datos siempre se seleccionen para pruebas y entrenamiento cada vez que se ejecuta el código.


El resultado de la función "train_test_split" es la asignación de los datos de entrada y las etiquetas a cuatro variables:


x_train: los datos de entrada que se utilizarán para entrenamiento

x_test: los datos de entrada que se utilizarán para pruebas

y_train: las etiquetas correspondientes a los datos de entrada utilizados para entrenamiento

y_test: las etiquetas correspondientes a los datos de entrada utilizados para pruebas


4. Entrenar el modelo de regresión lineal:

LM = LinearRegression()
LM.fit(x_train, y_train)

La primera línea crea una instancia del modelo de regresión lineal, usando la clase "LinearRegression" de la biblioteca scikit-learn de Python. Esta clase implementa un modelo de regresión lineal para ajustar una línea recta a los datos de entrada y etiquetas.


La segunda línea llama al método "fit" en el objeto "LM", que se utiliza para entrenar el modelo con los datos de entrada y etiquetas. Los argumentos que se pasan al método "fit" son:


x_train: los datos de entrada utilizados para entrenamiento

y_train: las etiquetas correspondientes a los datos de entrada utilizados para entrenamiento

Después de que se llama al método "fit", el modelo de regresión lineal ha sido entrenado y está listo para hacer predicciones sobre nuevos datos.


5. Hacer predicciones con el modelo entrenado:

y_pred = LM.predict(x_test)

La variable "y_pred" almacenará las predicciones del modelo. El método "predict" en el objeto "LM" se utiliza para hacer predicciones sobre nuevos datos. El argumento que se pasa al método "predict" es:


x_test: los datos de entrada utilizados para pruebas

El método "predict" devuelve una matriz que contiene las predicciones del modelo para cada uno de los datos de prueba. Estas predicciones pueden compararse con las etiquetas reales en "y_test" para evaluar la precisión del modelo.


6. Calcular el coeficiente de determinación y el error cuadrático medio


r2 = r2_score(y_test, y_pred)
print(f"El coeficiente determinacion es: {r2}")

mse = mean_squared_error(y_test, y_pred)
print('La raiz del error cuadrático medio es:', np.sqrt(mse))

En la primera línea, se calcula el coeficiente de determinación R^2 utilizando la función "r2_score" de la biblioteca scikit-learn. El coeficiente de determinación R^2 es una medida de la bondad de ajuste del modelo que varía entre 0 y 1. Un valor cercano a 1 indica un buen ajuste, mientras que un valor cercano a 0 indica un mal ajuste.


Los argumentos que se pasan a la función "r2_score" son:


y_test: las etiquetas reales para los datos de prueba

y_pred: las predicciones del modelo para los datos de prueba

Después, se imprime el valor del coeficiente de determinación R^2 usando una cadena de formato f.


En la segunda línea, se calcula el error cuadrático medio (MSE) utilizando la función "mean_squared_error" de la biblioteca scikit-learn. El MSE es una medida de la diferencia entre las predicciones y las etiquetas reales.


Los argumentos que se pasan a la función "mean_squared_error" son:


y_test: las etiquetas reales para los datos de prueba

y_pred: las predicciones del modelo para los datos de prueba

Después, se imprime la raíz del MSE usando la función "np.sqrt" de la biblioteca Numpy. La raíz del MSE se utiliza a menudo como una medida más interpretable de la precisión del modelo, ya que tiene las mismas unidades que las etiquetas reales.


Y el resultado es el siguiente:




7. Graficar los resultados para verificar la calidad de las predicciones:


plt.figure(figsize = (10,6))
plt.scatter(y_test, y_pred)
plt.plot(y_pred,y_pred, color="Red")
plt.show()

El método "plt.figure" se utiliza para crear una nueva figura y especificar su tamaño. Los argumentos que se pasan a "figsize" son:


figsize=(10, 6): las dimensiones de la figura, 10 unidades en el eje x y 6 unidades en el eje y.

El método "plt.scatter" crea un diagrama de dispersión. Los argumentos que se pasan a "plt.scatter" son:


y_test: las etiquetas reales para los datos de prueba

y_pred: las predicciones del modelo para los datos de prueba

El método "plt.plot" crea una línea recta que pasa por la origen. Los argumentos que se pasan a "plt.plot" son:


y_pred: las predicciones del modelo para los datos de prueba

color="Red": especifica el color de la línea recta como rojo

Finalmente, el método "plt.show" se utiliza para mostrar la figura en la pantalla.


El diagrama de dispersión y la línea recta permiten ver la correlación entre las etiquetas reales y las predicciones del modelo. Si el modelo es preciso, se espera que los puntos en el diagrama de dispersión estén cerca de la línea recta.

En conclusión, la regresión lineal se utiliza ampliamente en diferentes áreas, como finanzas, marketing, economía y ciencias sociales para resolver problemas como la predicción de precios de acciones, la demanda de productos, la influencia de la publicidad en las ventas, entre otros.


Eso la convierte una herramienta muy poderosa y versátil que se utiliza ampliamente en la industria y en la investigación debido a su simplicidad y a la facilidad de implementación en Python. Además, su capacidad para modelar relaciones lineales entre variables lo hace muy útil en una amplia gama de problemas reales.




61 visualizaciones0 comentarios

Entradas Recientes

Ver todo
bottom of page