Bootstrapping-Konfidenzintervall aus einer Regressionsvorhersage

10

Für die Hausaufgaben erhielt ich Daten, um einen Prädiktor zu erstellen / zu trainieren, der die Lasso-Regression verwendet. Ich erstelle den Prädiktor und trainiere ihn mit der Lasso-Python-Bibliothek von scikit learn.

Jetzt habe ich diesen Prädiktor, der bei gegebener Eingabe die Ausgabe vorhersagen kann.

Die zweite Frage lautete: "Erweitern Sie Ihren Prädiktor, um das Konfidenzintervall der Vorhersage mithilfe der Bootstrapping-Methode zu melden."

Ich habe mich umgesehen und Beispiele von Leuten gefunden, die dies für den Mittelwert und andere Dinge tun.

Aber ich bin völlig verloren, wie ich es für eine Vorhersage tun soll. Ich versuche, die Scikit-Bootstrap- Bibliothek zu verwenden.

Das Kurspersonal reagiert extrem wenig, daher ist jede Hilfe willkommen. Vielen Dank.

itsSLO
quelle
Ich weiß nicht, wie man Scikit benutzt, aber wenn es nur Scikit ist, an dem Sie interessiert sind, sollten Sie diese Frage nach StackOverflow verschieben. Davon abgesehen müssen Sie sich daran erinnern, dass Ihre Vorhersagen eine gemeine Antwort für sich sind. Durch das Bootstrapping erhalten Sie eine Möglichkeit, die Verteilung dieser mittleren Antwort abzuschätzen.
usεr11852
@ usεr11852 Ich beschränke mich im Moment darauf, nur Scikit zu verwenden. Aber wenn ich die Theorie hinter dem Bootstrapping-Konfidenzintervall von Vorhersagen verstehen kann, brauche ich möglicherweise keine Python-Hilfe. Ich bin mir zum Beispiel nicht sicher, woraus ich Stichproben machen werde, aus welchen Daten ich den Prädiktor trainiere oder aus welchen Vorhersagen ich? Ich bin wirklich verwirrt darüber, wie man eine Stichprobe erstellt, da sich eine Vorhersage nur auf eine Stichprobe bezieht, dh auf einen bestimmten Satz von Funktionen.
itsSLO
1
Beachten Sie, dass es falsch ist, von einem "Konfidenzintervall der Vorhersage" zu sprechen, da eine Vorhersage kein Parameter ist.
Michael M

Antworten:

10

Bootstrapping bezieht sich auf das erneute Abtasten Ihrer Daten durch Ersetzen. Das heißt, anstatt Ihr Modell an das ursprüngliche X und Y anzupassen, passen Sie Ihr Modell mehrmals an neu abgetastete Versionen von X und Y an.

Somit erhalten Sie n leicht unterschiedliche Modelle, mit denen Sie ein Konfidenzintervall erstellen können. Hier ist ein visuelles Beispiel für ein solches Intervall.

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)

Geben Sie hier die Bildbeschreibung ein

Regenschein
quelle
8

Wenn Sie die API von scikit für den Bootstrap-Teil des Codes verwenden möchten:

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
quelle
5
Obwohl die Implementierung in Fragen häufig mit inhaltlichen Inhalten gemischt wird, sollten wir eine Website sein, auf der Informationen zu Statistiken, maschinellem Lernen usw. und nicht zu Code bereitgestellt werden. Es kann gut sein, auch Code bereitzustellen, aber bitte erläutern Sie Ihre inhaltliche Antwort im Text für Personen, die diese Sprache nicht gut genug lesen, um die Antwort zu erkennen und aus dem Code zu extrahieren.
Gung - Reinstate Monica