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}")