Intervalo de confianza de arranque de una predicción de regresión

10

Para la tarea, me dieron datos para crear / entrenar un predictor que usa la regresión de lazo. Creo el predictor y lo entreno usando la biblioteca lasso python de scikit learn.

Así que ahora tengo este predictor que cuando se da entrada puede predecir la salida.

La segunda pregunta fue "Extienda su predictor para informar el intervalo de confianza de la predicción utilizando el método de arranque".

Miré a mi alrededor y encontré ejemplos de personas que hacen esto por la mala y otras cosas.

Pero estoy completamente perdido en cómo se supone que debo hacerlo para una predicción. Estoy tratando de usar la biblioteca scikit-bootstrap .

El personal del curso está siendo extremadamente insensible, por lo que se agradece cualquier ayuda. Gracias.

itsSLO
fuente
No sé cómo usar Scikit, pero si solo le interesa Scikit, debe mover esta pregunta a StackOverflow. Dicho esto, debes recordar que tus predicciones son una respuesta media en sí mismas. Lo que obtendrá a través del procedimiento de arranque es una forma de estimar la distribución de esa respuesta media.
usεr11852
@ usεr11852 Estoy limitado a usar solo scikit en este momento. Pero si puedo entender la teoría detrás del intervalo de confianza de predicciones de arranque, es posible que no necesite ninguna ayuda de Python. Por ejemplo, no estoy seguro de qué voy a tomar muestras, los datos que utilizo para entrenar el predictor o las predicciones. Estoy realmente confundido sobre cómo muestrear porque una predicción está relacionada con una sola muestra, es decir, un conjunto específico de características.
itsSLO
1
Tenga en cuenta que es incorrecto hablar de un "intervalo de confianza de la predicción" porque una predicción no es un parámetro.
Michael M

Respuestas:

10

Bootstrapping se refiere a volver a muestrear sus datos con reemplazo. Es decir, en lugar de ajustar su modelo a la X e y original, ajusta su modelo a las versiones remuestreadas de X e y por varias veces.

Por lo tanto, obtienes n modelos ligeramente diferentes que puedes usar para crear un intervalo de confianza. Aquí hay un ejemplo visual de tal intervalo.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# Create toy data 
x = np.linspace(0, 10, 20)
y = x + (np.random.rand(len(x)) * 10)

# Extend x data to contain another row vector of 1s
X = np.vstack([x, np.ones(len(x))]).T

plt.figure(figsize=(12,8))
for i in range(0, 500):
    sample_index = np.random.choice(range(0, len(y)), len(y))

    X_samples = X[sample_index]
    y_samples = y[sample_index]    

    lr = LinearRegression()
    lr.fit(X_samples, y_samples)
    plt.plot(x, lr.predict(X), color='grey', alpha=0.2, zorder=1)

plt.scatter(x,y, marker='o', color='orange', zorder=4)

lr = LinearRegression()
lr.fit(X, y)
plt.plot(x, lr.predict(X), color='red', zorder=5)

ingrese la descripción de la imagen aquí

Regenschein
fuente
8

Si desea utilizar la API de scikit para la parte de arranque del código:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import BaggingRegressor

# Create toy data 
x = np.linspace(0, 10, 20)
y = x + (np.random.rand(len(x)) * 10)

# Extend x data to contain another row vector of 1s
X = np.vstack([x, np.ones(len(x))]).T

n_estimators = 50
model = BaggingRegressor(LinearRegression(), 
                         n_estimators=n_estimators,
                         bootstrap=True)

model.fit(X, y)

plt.figure(figsize=(12,8))

# Accessing each base_estimator (already fitted)
for m in model.estimators_:
    plt.plot(x, m.predict(X), color='grey', alpha=0.2, zorder=1)

plt.scatter(x,y, marker='o', color='orange', zorder=4)

# "Bagging model" prediction
plt.plot(x, model.predict(X), color='red', zorder=5)
Gustavo Woiler Rauscher
fuente
55
Aunque la implementación a menudo se mezcla con contenido sustantivo en las preguntas, se supone que somos un sitio para proporcionar información sobre estadísticas, aprendizaje automático, etc., no código. También puede ser bueno proporcionar código, pero elabore su respuesta sustantiva en texto para las personas que no leen este idioma lo suficiente como para reconocer y extraer la respuesta del código.
gung - Restablecer Monica