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 se denomina 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 es posible obtener los intervalos de confianza para la línea de regresión en cualquier punto. Sin embargo, la sintaxis es algo compleja:
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 el nivel de confianza, usualmente establecido en 0.05
.
Con el código anterior, se obtienen 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 si X_new_tilde
es un arreglo).
Con 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 del objetivo, no es posible encontrar la línea de regresión exacta. Todo lo que se hace es intentar aproximarla en función de los datos disponibles. 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 un nivel de confianza alpha
.
Se puede observar que el intervalo se vuelve cada vez más amplio 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 inadecuada, 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 se denomina 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 es posible obtener los intervalos de confianza para la línea de regresión en cualquier punto. Sin embargo, la sintaxis es algo compleja:
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 el nivel de confianza, usualmente establecido en 0.05
.
Con el código anterior, se obtienen 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 si X_new_tilde
es un arreglo).
Con 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 del objetivo, no es posible encontrar la línea de regresión exacta. Todo lo que se hace es intentar aproximarla en función de los datos disponibles. 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 un nivel de confianza alpha
.
Se puede observar que el intervalo se vuelve cada vez más amplio 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 inadecuada, 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!