Polynom-Regression mit Scikit-Learn

29

Ich versuche, Scikit-Learn für die Polynom-Regression zu verwenden. Nach meinem Verständnis ist die polynomielle Regression ein Sonderfall der linearen Regression. Ich habe gehofft, dass vielleicht eines der generalisierten linearen Modelle von scikit für Polynome höherer Ordnung parametrisiert werden kann, aber ich sehe keine Möglichkeit, dies zu tun.

Ich habe es geschafft, einen Support Vector Regressor mit einem Poly-Kernel zu verwenden. Das hat bei einer Teilmenge meiner Daten gut funktioniert, aber es dauert viel zu lange, bis größere Datenmengen passen, sodass ich immer noch etwas schneller finden muss (auch wenn ich mit etwas Präzision handeln möchte).

Vermisse ich hier etwas Offensichtliches?

Mihai Damian
quelle

Antworten:

25

Bei gegebenen Daten , einem Spaltenvektor, und , dem Zielvektor, können Sie eine Polynomregression durchführen, indem Sie Polynome von anhängen . Überlegen Sie zum Beispiel, oby xxyx

x=[2113]

Die Verwendung dieses Vektors in der linearen Regression impliziert das Modell:

y=α1x

Wir können Spalten hinzufügen, die Potenzen des obigen Vektors sind und das Hinzufügen von Polynomen zur Regression darstellen. Nachfolgend zeigen wir dies für Polynome bis zur Potenz 3:

X=[24811113132133]

Dies ist unsere neue Datenmatrix, die wir in der linearen Regression von sklearn verwenden und die das Modell darstellt:

y=α1x+α2x2+α3x3

Beachten Sie, dass ich keinen konstanten Vektor von hinzugefügt habe, da sklearn diesen automatisch einbezieht.1

Cam.Davidson.Pilon
quelle
26

Theorie

Die polynomiale Regression ist ein Spezialfall der linearen Regression. Mit der Hauptidee, wie Sie Ihre Funktionen auswählen. Betrachtet man die multivariate Regression mit 2 Variablen: x1und x2. Die lineare Regression sieht folgendermaßen aus:y = a1 * x1 + a2 * x2.

Nun möchten Sie eine polynomielle Regression haben (lassen Sie uns ein 2-Grad-Polynom erstellen). Wir werden ein paar zusätzliche Funktionen erstellen: x1*x2, x1^2und x2^2. So erhalten wir Ihre "lineare Regression":

y = a1 * x1 + a2 * x2 + a3 * x1*x2 + a4 * x1^2 + a5 * x2^2

Dies zeigt deutlich einen wichtigen konzeptionellen Fluch der Dimensionalität , da die Anzahl der neuen Merkmale mit dem Polynomgradwachstum viel schneller als linear ansteigt. Sie können einen Blick hier über dieses Konzept .

Übe mit scikit-learn

All dies müssen Sie nicht in Scikit erledigen. Dort ist bereits eine polynomielle Regression verfügbar ( Version 0.15 . Hier können Sie überprüfen, wie Sie sie aktualisieren können ).

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model

X = [[0.44, 0.68], [0.99, 0.23]]
vector = [109.85, 155.72]
predict= [[0.49, 0.18]]
#Edit: added second square bracket above to fix the ValueError problem

poly = PolynomialFeatures(degree=2)
X_ = poly.fit_transform(X)
predict_ = poly.fit_transform(predict)

clf = linear_model.LinearRegression()
clf.fit(X_, vector)
print clf.predict(predict_)
Salvador Dali
quelle
1
Was ist, wenn ich keine Interaktionsterme als x1 * x2 haben möchte, muss ich X_ manuell konstruieren? Im PolynomialFeatures () -Konstruktor gibt es einen Parameter "interact_only", der standardmäßig den Wert "False" hat. Aber es auf True zu setzen, macht das Gegenteil von dem, was ich will: Es behält NUR die Interaktionsbegriffe bei und behält nicht x1 ^ 2, x2 ^ 2 usw.
DenisFLASH
Der Link zu YouTube behauptet, dass das Video nicht mehr existiert. Hast du einen anderen Link dazu?
Markon
@ Markon jedes Video aus dieser Liste ist gut genug: youtube.com/results?search_query=curse+of+dimensionality
Salvador Dali
@ SalvadorDali das ist, was Dimensionsreduktion ist für
user3916597
Ich frage mich, ob wir die Daten vor oder nach der Bewerbung PolynomialFeatureszentrieren sollten.
Renakre
2

Wenn Sie eine multivariate Regression und nicht nur eine univariate Regression verwenden, vergessen Sie die Kreuzbegriffe nicht. Wenn Sie zum Beispiel zwei Variablen und haben und Polynome bis zur Potenz 2 wollen, sollten Sie wobei der letzte Term ( ) der ist, der ich bin sprechen über.x1x2y=a1x1+a2x2+a3x12+a4x22+a5x1x2a5x1x2

Vermeer Grange
quelle