2012-11-04 10 views
7

Ich berechnete ein Modell mit OLS (multiple lineare Regression). Ich habe meine Daten geteilt und getestet (jeweils die Hälfte), und dann möchte ich Werte für die zweite Hälfte der Etiketten vorhersagen.Vorhersage von Werten mit einem OLS-Modell mit Statistikmodellen

model = OLS(labels[:half], data[:half]) 
predictions = model.predict(data[half:]) 

Das Problem ist, dass ich bekommen und Fehler: File „/usr/local/lib/python2.7/dist-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/ statsmodels/Regressions/linear_model.py“, Linie 281, in vorherzusagen return np.dot (exog, params) Valueerror: Matrizen ausgerichtet sind, nicht

ich habe folgende Array Formen: data.shape: (426, 215) labels.shape: (426,)

Wenn ich die Eingabe in model.predict transponiere, bekomme ich ein Ergebnis, aber mit einer Form von (426.213), so nehme ich an seine falsch, wie gut (ich einen Vektor von 213 Zahlen erwarte als Label Prognosen):

model.predict(data[half:].T) 

Irgendeine Idee, wie man es an der Arbeit?

Antwort

11

Für statsmodels> = 0,4, wenn ich mich richtig erinnere

model.predict nicht über die Parameter kennen, und verlangt, dass sie in der Aufforderung sehen http://statsmodels.sourceforge.net/stable/generated/statsmodels.regression.linear_model.OLS.predict.html

Was in Ihrem Fall arbeiten sollte, ist die passen modellieren und dann die Vorhersage-Methode der Ergebnisinstanz verwenden.

model = OLS(labels[:half], data[:half]) 
results = model.fit() 
predictions = results.predict(data[half:]) 

oder kürzer

results = OLS(labels[:half], data[:half]).fit() 
predictions = results.predict(data[half:]) 

http://statsmodels.sourceforge.net/stable/generated/statsmodels.regression.linear_model.RegressionResults.predict.html mit docstring

Hinweis fehlt: dies wurde in der Entwicklungsversion (abwärtskompatibel) geändert, dass die Vorteile der "Formel" Informationen nehmen in vorhersagen http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.RegressionResults.predict.html

+0

Obwohl dies die richtige Antwort auf die Frage BIG WARNING über die Modellanpassung und Datenaufteilung ist. Sie sollten 80% der Daten (oder einen größeren Teil) für Training/Anpassung und 20% (den Rest) für Tests/Vorhersagen verwendet haben. Daten 50:50 zu teilen ist wie Schrodingers Katze. Wir haben kein Vertrauen, dass unsere Daten alle gut oder falsch sind. So ist das Vertrauen in das Modell irgendwo in der Mitte. Wir wollen ein besseres Vertrauen in unser Modell haben, daher sollten wir mehr Daten trainieren und testen. – lukassos

Verwandte Themen