Intervalle de confiance d'amorçage à partir d'une prédiction de régression

10

Pour les devoirs, on m'a donné des données pour créer / former un prédicteur qui utilise la régression au lasso. Je crée le prédicteur et je l'entraîne à l'aide de la bibliothèque lasso python de scikit learn.

Alors maintenant, j'ai ce prédicteur qui, une fois donné, peut prédire la sortie.

La deuxième question consistait à "étendre votre prédicteur pour rendre compte de l'intervalle de confiance de la prédiction en utilisant la méthode d'amorçage".

J'ai regardé autour de moi et j'ai trouvé des exemples de personnes faisant cela pour la moyenne et d'autres choses.

Mais je suis complètement perdu sur la façon dont je suis censé le faire pour une prédiction. J'essaie d'utiliser la bibliothèque scikit-bootstrap .

Le personnel du cours est extrêmement insensible, donc toute aide est appréciée. Je vous remercie.

itsSLO
la source
Je ne sais pas comment utiliser Scikit mais si c'est uniquement Scikit qui vous intéresse, vous devriez déplacer cette question vers StackOverflow. Cela étant dit, vous devez vous rappeler que vos prédictions sont une réponse moyenne en soi. Ce que vous obtiendrez grâce à la procédure d'amorçage est un moyen d'estimer la distribution de cette réponse moyenne.
usεr11852
@ usεr11852 Je suis limité à utiliser scikit pour le moment. Mais si je peux comprendre la théorie derrière l'amorçage de l'intervalle de confiance des prédictions, je n'aurai peut-être pas besoin d'aide python. Par exemple, je ne sais pas de quoi je vais échantillonner, les données dans lesquelles j'utilise pour former le prédicteur ou les prédictions? Je suis vraiment confus sur la façon d'échantillonner, car une prédiction est liée à un seul échantillon, à savoir un ensemble spécifique de fonctionnalités.
itsSLO
1
Notez qu'il est faux de parler d'un "intervalle de confiance de la prédiction" car une prédiction n'est pas un paramètre.
Michael M

Réponses:

10

Le bootstrapping fait référence au rééchantillonnage de vos données avec remplacement. Autrement dit, au lieu d'adapter votre modèle aux X et y d'origine, vous adaptez votre modèle aux versions rééchantillonnées de X et y plusieurs fois.

Ainsi, vous obtenez n modèles légèrement différents que vous pouvez utiliser pour créer un intervalle de confiance. Voici un exemple visuel d'un tel intervalle.

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)

entrez la description de l'image ici

Regenschein
la source
8

Si vous souhaitez utiliser l'API de scikit pour la partie bootstrap du code:

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
la source
5
Bien que l'implémentation soit souvent mélangée à un contenu substantiel dans les questions, nous sommes censés être un site fournissant des informations sur les statistiques, l'apprentissage automatique, etc., pas le code. Il peut également être utile de fournir du code, mais veuillez élaborer votre réponse substantielle dans le texte pour les personnes qui ne lisent pas assez bien cette langue pour reconnaître et extraire la réponse du code.
gung - Rétablir Monica