Calculo en Python
Datos Simulados
Para este ejercicio, vamos a crear un conjunto de datos de regresión utilizando numpy y pandas. Luego, ajustaremos un modelo de regresión lineal utilizando scikit-learn y finalmente calcularemos las métricas de evaluación.
Paso 1: Generar Datos
import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score import matplotlib.pyplot as plt # Parámetros del ejercicio muestras=100 dependencia=4 ruido=1 # Generar datos simulados np.random.seed(42) X = 2 * np.random.rand(muestras, 1) # 100 muestras de una variable independiente # Relación lineal con ruido. Cuanta más dependencia, más enlazados están los datos con # la variable independiente. Cuanto más ruido, más alejados y = 3 + dependencia * X + np.random.randn(muestras, 1)*ruido
Paso 2: Dividir los Datos en Conjuntos de Entrenamiento y Prueba
# Creamos un conjunto de entrenamiento y uno de prueba porcentaje=0.2 tam=int(len(X)*(1-porcentaje)) X_train=X[:tam] X_test=X[tam:] y_train=y[:tam] y_test=y[tam:] # Lo mismo usando train_test # X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=porcentaje)
Entrenamos el modelo
# Crear el modelo de regresión lineal model = LinearRegression() model.fit(X_train, y_train) # Realizar predicciones y_pred = model.predict(X_test)
Dibujamos la gráfica
# Dibujar datos y recta
plt.scatter(X, y, color='blue', label="Datos Reales")
plt.plot(X_test, y_pred, color='red', label="Regresión Lineal")
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
Paso 4: Calcular las Métricas de Evaluación
# Información del modelo
# Obtener los coeficientes e intercepto
print("Coeficiente:", model.coef_)
print("Intercepto:", model.intercept_)
# Calcular métricas
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
Resultados Esperados
Al ejecutar el código anterior, deberías obtener un resultado similar a este (los valores específicos pueden variar debido al ruido en los datos):
Error Cuadrático Medio (MSE): 0.84
Raíz del Error Cuadrático Medio (RMSE): 0.92
Error Absoluto Medio (MAE): 0.70
Coeficiente de Determinación (R²): 0.83
Análisis de Resultados
- MSE y RMSE: Indican el tamaño promedio de los errores. Un MSE bajo sugiere un buen ajuste del modelo.
- MAE: Proporciona la magnitud media del error sin considerar la dirección. Un MAE bajo también indica un buen rendimiento.
- R²: Indica la proporción de la variabilidad en la variable dependiente que puede ser explicada por el modelo. Un valor de 0.83 significa que el modelo explica el 83% de la variación en los datos.
Código completo
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import matplotlib.pyplot as plt
# Parámetros del ejercicio
muestras=100
dependencia=4
ruido=1
# Generar datos simulados
np.random.seed(42)
X = 2 * np.random.rand(muestras, 1) # 100 muestras de una variable independiente
# Relación lineal con ruido. Cuanta más dependencia, más enlazados están los datos con
# la variable independiente. Cuanto más ruido, más alejados
y = 3 + dependencia * X + np.random.randn(muestras, 1)*ruido
# Creamos un conjunto de entrenamiento y uno de prueba
porcentaje=0.2
tam=int(len(X)*(1-porcentaje))
X_train=X[:tam]
X_test=X[tam:]
y_train=y[:tam]
y_test=y[tam:]
# Lo mismo usando train_test
# X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=porcentaje)
# Crear el modelo de regresión lineal
model = LinearRegression()
model.fit(X_train, y_train)
# Realizar predicciones
y_pred = model.predict(X_test)
# Dibujar datos y recta
plt.scatter(X, y, color='blue', label="Datos Reales")
plt.plot(X_test, y_pred, color='red', label="Regresión Lineal")
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
# Información del modelo
# Obtener los coeficientes e intercepto
print("Coeficiente:", model.coef_)
print("Intercepto:", model.intercept_)
# Calcular métricas
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
# Imprimir resultados
print(f"Error Cuadrático Medio (MSE): {mse:.2f}")
print(f"Raíz del Error Cuadrático Medio (RMSE): {rmse:.2f}")
print(f"Error Absoluto Medio (MAE): {mae:.2f}")
print(f"Coeficiente de Determinación (R²): {r2:.2f}")