Unterschied zwischen Statistikmodell OLS und linearer Skikit-Regression

13

Ich habe eine Frage zu zwei verschiedenen Methoden aus verschiedenen Bibliotheken, die scheinbar den gleichen Job machen. Ich versuche, ein lineares Regressionsmodell zu erstellen.

Hier ist der Code, den ich mit der Statistikmodellbibliothek mit OLS verwende:

X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1)

x_train = sm.add_constant(X_train)
model = sm.OLS(y_train, x_train)
results = model.fit()

print "GFT + Wiki / GT  R-squared", results.rsquared

Dieser Ausdruck ist GFT + Wiki / GT R-Quadrat 0.981434611923

und die zweite ist die lineare Modellmethode:

model = LinearRegression()
model.fit(X_train, y_train)

predictions = model.predict(X_test)

print 'GFT + Wiki / GT R-squared: %.4f' % model.score(X_test, y_test)

Dieser Ausdruck ist GFT + Wiki / GT R-Quadrat: 0.8543

Meine Frage ist also, dass beide Methoden unser R ^ 2-Ergebnis ausgeben, aber eine 0,98 und die andere 0,85.

Nach meinem Verständnis arbeitet OLS mit dem Trainingsdatensatz. Also meine Fragen,

  • Gibt es eine Möglichkeit, mit Testdatensätzen mit OLS zu arbeiten?
  • Gibt uns die Bewertung des Trainingsdatensatzes eine Bedeutung (In OLS haben wir keinen Testdatensatz verwendet)? Nach meinem bisherigen Wissen müssen wir mit Testdaten arbeiten.
  • Was ist der Unterschied zwischen OLS und linearer Skikit-Regression? Welches verwenden wir zur Berechnung der Bewertung des Modells?

Danke für jede Hilfe.

Batuhan Bardak
quelle

Antworten:

14

Zunächst in Bezug auf die Nutzung. Sie können die Vorhersage in Statistikmodellen auf sehr ähnliche Weise wie in scikit-learn abrufen, mit der Ausnahme, dass wir die von zurückgegebene Ergebnisinstanz verwendenfit

predictions = results.predict(X_test)

Anhand der Vorhersagen können wir Statistiken berechnen, die auf dem Vorhersagefehler basieren

prediction_error = y_test - predictions

Es gibt eine separate Liste von Funktionen, mit denen die Güte der Vorhersagestatistik berechnet werden kann, diese ist jedoch weder in die Modelle integriert, noch enthält sie das Quadrat R. (Ich habe noch nie von R-Quadrat gehört, das für Daten außerhalb der Stichprobe verwendet wird.) Das Berechnen dieser Daten erfordert ein wenig mehr Arbeit durch den Benutzer, und Statistikmodelle verfügen nicht über denselben Statistiksatz, insbesondere nicht für Klassifizierungen oder Modelle mit einer binären Antwortvariablen.

Zu deinen anderen zwei Punkten:

Die lineare Regression ist in ihrer Grundform in Statistikmodellen und beim Scikit-Lernen dieselbe. Die Implementierung unterscheidet sich jedoch, was in Randfällen zu unterschiedlichen Ergebnissen führen kann, und scikit learn unterstützt im Allgemeinen größere Modelle besser. Beispielsweise werden in Statistikmodellen derzeit nur in sehr wenigen Teilen dünne Matrizen verwendet.

Der wichtigste Unterschied besteht in der umgebenden Infrastruktur und den Anwendungsfällen, die direkt unterstützt werden.

Statsmodels folgt weitgehend dem traditionellen Modell, bei dem wir wissen möchten, wie gut ein bestimmtes Modell zu den Daten passt und welche Variablen das Ergebnis "erklären" oder beeinflussen oder wie groß der Effekt ist. Scikit-learn folgt der Tradition des maschinellen Lernens, bei der die Hauptaufgabe darin besteht, das "beste" Modell für die Vorhersage auszuwählen.

Infolgedessen liegt der Schwerpunkt bei den unterstützenden Merkmalen von Statistikmodellen auf der Analyse der Trainingsdaten, einschließlich Hypothesentests und Anpassungsgütemaßnahmen, während der Schwerpunkt in der unterstützenden Infrastruktur bei Scikit-Learn auf der Modellauswahl für außerbetriebliche Modelle liegt. Stichprobenvorhersage und damit Kreuzvalidierung auf "Testdaten".

Dies unterstreicht den Unterschied, es gibt auch bei der Nutzung noch recht viel Überlappung. statsmodels erstellt auch Vorhersagen und Prognosen im Zeitreihenkontext. Wenn wir jedoch eine Kreuzvalidierung für die Vorhersage in Statistikmodellen durchführen möchten, ist es derzeit noch oft einfacher, die Einrichtung für die Kreuzvalidierung von scikit-learn zusammen mit den Schätzmodellen von Statistikmodellen wiederzuverwenden.

Josef
quelle
Hmm, ich versuche, ein ARMA-Modell von statsmodels.tsa zu verwenden, aber die Oberfläche von predict ist dort völlig anders. Wissen Sie, wie man es Testdaten füttert?
Ephes
1
Das ist eine andere Frage, und Sie müssen sich die Dokumentation oder Beispiele ansehen. Die Vorhersage in Zeitreihenmodellen ist aufgrund der sequentiellen Zeitstruktur und der Vorhersage der Werte in den nächsten Zeiträumen ziemlich unterschiedlich.
Josef
Du hast recht, das ist eine andere Frage, trotzdem danke für die Erklärung. Ich habe die Dokumentation gelesen und irgendwie funktioniert. Aber ich verstehe immer noch nicht, warum die Benutzeroberfläche anders ist. Insbesondere, warum es nicht möglich ist, Merkmalsvektoren bereitzustellen und Vorhersagen (Prognosen) abzurufen.
Ephes
Mit ARMA und SARIMAX können erklärende Variablen exogin die Schätzung und Prognose einbezogen werden.
Josef
Diese Frage zu Stackowerlow befasst sich mit dem Unterschied bei den Schnittstellen: stackoverflow.com/questions/41045752/…
David Dale
1

Im OLS-Modell verwenden Sie die Trainingsdaten, um sie anzupassen und vorherzusagen.

Mit dem LinearRegression-Modell verwenden Sie Trainingsdaten, um sie anzupassen, und testen Daten, um sie vorherzusagen. Daher ergeben sich unterschiedliche Ergebnisse für R2-Scores.

Wenn Sie Testdaten im OLS-Modell verwenden, sollten Sie dieselben Ergebnisse und einen niedrigeren Wert erzielen

Vitali Müller
quelle