Interpolación vs Extrapolación
En el capítulo anterior, observamos que nuestras predicciones utilizando diferentes modelos se vuelven más diversas en los extremos.
Para ser más precisos, las predicciones se vuelven extrañas en el momento en que superamos el rango de valores del conjunto de entrenamiento. Predecir valores fuera del rango del conjunto de entrenamiento se denomina extrapolación, y predecir valores dentro del rango es interpolación.
La regresión no maneja bien la extrapolación. Se utiliza para la interpolación y puede producir predicciones absurdas cuando las nuevas instancias están fuera del rango del conjunto de entrenamiento.
Intervalos de confianza
Usando la clase OLS
, también puedes obtener los intervalos de confianza para la línea de regresión en cualquier punto. Pero la sintaxis es un poco complicada:
lower = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_lower']
upper = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_upper']
Donde alpha
es un nivel de confianza, usualmente establecido en 0.05
.
Con el código anterior, obtendrás los límites inferior y superior del intervalo de confianza de la línea de regresión en el punto X_new_tilde
(o un arreglo de límites superiores e inferiores si X_new_tilde
es un arreglo).
Dado esto, ahora podemos graficar la línea de regresión junto con su intervalo de confianza:
12345678910111213141516171819202122import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 4 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80) # 1-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new.reshape(-1,1)) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) lower = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_lower'] # Get lower bound for each point upper = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_upper'] # get upper bound for each point plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.fill_between(X_new, lower, upper, alpha=0.4) plt.show()
Sin conocer la distribución de un objetivo, no podemos encontrar la línea de regresión exacta. Todo lo que hacemos es intentar aproximarla en base a nuestros datos. El intervalo de confianza de la línea de regresión es el intervalo en el que la línea de regresión exacta se encuentra con el nivel de confianza alpha
.
Puedes observar que el intervalo se vuelve cada vez más grande a medida que se aleja del rango del conjunto de entrenamiento.
Los intervalos de confianza se construyen asumiendo que se eligió correctamente el modelo (por ejemplo, Regresión Lineal Simple o Regresión Polinómica de grado 4).
Si el modelo se elige de manera incorrecta, el intervalo de confianza no es confiable, y la propia línea tampoco lo es. Aprenderá cómo seleccionar el mejor modelo en la siguiente sección.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 5.26
Interpolación vs Extrapolación
Desliza para mostrar el menú
En el capítulo anterior, observamos que nuestras predicciones utilizando diferentes modelos se vuelven más diversas en los extremos.
Para ser más precisos, las predicciones se vuelven extrañas en el momento en que superamos el rango de valores del conjunto de entrenamiento. Predecir valores fuera del rango del conjunto de entrenamiento se denomina extrapolación, y predecir valores dentro del rango es interpolación.
La regresión no maneja bien la extrapolación. Se utiliza para la interpolación y puede producir predicciones absurdas cuando las nuevas instancias están fuera del rango del conjunto de entrenamiento.
Intervalos de confianza
Usando la clase OLS
, también puedes obtener los intervalos de confianza para la línea de regresión en cualquier punto. Pero la sintaxis es un poco complicada:
lower = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_lower']
upper = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_upper']
Donde alpha
es un nivel de confianza, usualmente establecido en 0.05
.
Con el código anterior, obtendrás los límites inferior y superior del intervalo de confianza de la línea de regresión en el punto X_new_tilde
(o un arreglo de límites superiores e inferiores si X_new_tilde
es un arreglo).
Dado esto, ahora podemos graficar la línea de regresión junto con su intervalo de confianza:
12345678910111213141516171819202122import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 4 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80) # 1-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new.reshape(-1,1)) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) lower = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_lower'] # Get lower bound for each point upper = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_upper'] # get upper bound for each point plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.fill_between(X_new, lower, upper, alpha=0.4) plt.show()
Sin conocer la distribución de un objetivo, no podemos encontrar la línea de regresión exacta. Todo lo que hacemos es intentar aproximarla en base a nuestros datos. El intervalo de confianza de la línea de regresión es el intervalo en el que la línea de regresión exacta se encuentra con el nivel de confianza alpha
.
Puedes observar que el intervalo se vuelve cada vez más grande a medida que se aleja del rango del conjunto de entrenamiento.
Los intervalos de confianza se construyen asumiendo que se eligió correctamente el modelo (por ejemplo, Regresión Lineal Simple o Regresión Polinómica de grado 4).
Si el modelo se elige de manera incorrecta, el intervalo de confianza no es confiable, y la propia línea tampoco lo es. Aprenderá cómo seleccionar el mejor modelo en la siguiente sección.
¡Gracias por tus comentarios!