LinearRegression
El comando LinearRegression
es parte del módulo linear_model
de la biblioteca scikit-learn en Python y se usa para implementar un modelo de regresión lineal. Este modelo intenta ajustar una línea (o un hiperplano en dimensiones superiores) que minimiza la suma de los errores cuadrados entre las predicciones del modelo y los valores reales del conjunto de datos.
Sintaxis básica:
from sklearn.linear_model import LinearRegression
model = LinearRegression()
Parámetros principales:
- fit_intercept: (bool, opcional, por defecto=True)
Si se debe calcular el intercepto (ordenada al origen) para este modelo. Si se establece enFalse
, no se calculará el intercepto, lo que forzará a la línea de regresión a pasar por el origen.- Ejemplo:
LinearRegression(fit_intercept=False)
- Ejemplo:
- normalize: (bool, opcional, por defecto=False)
Este parámetro ya está obsoleto en versiones recientes de scikit-learn y se ha eliminado. Solía ser utilizado para normalizar las variables de entrada. Hoy en día, se recomienda normalizar los datos manualmente usando unStandardScaler
u otra técnica de preprocesamiento. - copy_X: (bool, opcional, por defecto=True)
Si debe copiar los datos de entrada antes de procesarlos. Si se establece enFalse
, se puede modificar elX
original. - n_jobs: (int, opcional, por defecto=None)
Número de trabajos (procesos o hilos) usados para el cálculo. Si se establece en -1, se utilizan todos los procesadores disponibles en el sistema.
Atributos importantes:
- coef_: Los coeficientes de la regresión, es decir, los pesos asignados a cada característica.
- intercept_: El valor del intercepto (ordenada al origen) en el modelo.
- score(): R² del modelo, que mide la proporción de la variabilidad total en el conjunto de datos que es explicada por el modelo.
Métodos:
- fit(X, y): Ajusta el modelo a los datos.
- predict(X): Realiza predicciones sobre nuevos datos basados en el modelo ajustado.
- score(X, y): Retorna el coeficiente de determinación ( R^2 ), que mide qué tan bien el modelo predice los datos proporcionados.
Ejemplo de uso:
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# Crear datos de ejemplo (una relación lineal)
X = np.array([[1], [2], [3], [4], [5]]) # Característica independiente
y = np.array([1, 2, 3, 3.5, 4.5]) # Valores dependientes
# Crear y ajustar el modelo
model = LinearRegression()
model.fit(X, y)
# Obtener los coeficientes e intercepto
print("Coeficiente:", model.coef_)
print("Intercepto:", model.intercept_)
# Hacer predicciones
y_pred = model.predict(X)
# Graficar los resultados
plt.scatter(X, y, color='blue', label="Datos Reales")
plt.plot(X, y_pred, color='red', label="Regresión Lineal")
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
Salida:
- Coeficiente: El peso que multiplica a cada característica de entrada.
- Intercepto: El valor donde la línea de regresión cruza el eje y.
Interpretación del Ejemplo:
En el ejemplo anterior, la regresión lineal intenta encontrar la mejor línea que ajuste a los datos de entrada. Luego de ajustar el modelo usando fit()
, el coeficiente y el intercepto nos proporcionan la ecuación de la línea recta de la forma ( y = mX + b ), donde m
es el coeficiente e b
es el intercepto.
Ejemplo con predicción:
# Nuevos datos para predecir
X_new = np.array([[6], [7]])
# Predicción
y_new_pred = model.predict(X_new)
print("Predicción para nuevos datos:", y_new_pred)
Interpretación:
El modelo hará predicciones basadas en los datos que nunca ha visto (en este caso, ( X = 6 ) y ( X = 7 )) usando la línea ajustada previamente.
Evaluar el modelo:
# Evaluar el modelo con el coeficiente de determinación R^2
r2_score = model.score(X, y)
print("R^2 del modelo:", r2_score)
El valor ( R^2 ) indica qué tan bien el modelo se ajusta a los datos. Un valor de ( R^2 ) cercano a 1 indica un buen ajuste.
Ejemplo con dos series de datos y una variable dependiente:
# Importar las librerías necesarias import numpy as np import pandas as pd from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # Datos de entrada (variables independientes) # Tamaño de la casa (en metros cuadrados) y número de habitaciones X = np.array([[50, 1], [60, 2], [70, 2], [80, 3], [100, 3], [120, 4], [150, 4]]) # Valores dependientes (precio de la casa en miles de dólares) y = np.array([150, 200, 250, 300, 400, 500, 600]) # Crear el modelo de regresión lineal model = LinearRegression() # Entrenar el modelo model.fit(X, y) # Coeficientes (pendientes) y término independiente (intercepto) print(f'Coeficientes (pendientes): {model.coef_}') print(f'Intercepto: {model.intercept_}') # Predecir los precios basados en los valores de entrada y_pred = model.predict(X) # Dibujar una gráfica 3D para ver cómo se ajusta la regresión fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # Variables independientes en el gráfico tamaño_casa = X[:, 0] # Primera columna habitaciones = X[:, 1] # Segunda columna # Gráfico de dispersión de los datos originales ax.scatter(tamaño_casa, habitaciones, y, color='blue', label='Datos reales') # Gráfico de la predicción del modelo ax.scatter(tamaño_casa, habitaciones, y_pred, color='red', label='Predicción del modelo') # Etiquetas del gráfico ax.set_xlabel('Tamaño de la casa (m²)') ax.set_ylabel('Número de habitaciones') ax.set_zlabel('Precio de la casa (en miles de dólares)') plt.title('Regresión lineal múltiple') plt.legend() plt.show() # Predecir un nuevo valor nueva_prediccion = model.predict([[110, 3]]) # Ejemplo: casa de 110 m² y 3 habitaciones print(f'Predicción para una casa de 110 m² y 3 habitaciones: ${nueva_prediccion[0]:.2f} mil dólares')