2017-07-13 4 views
2

In einem Buch mit habe ich den folgenden Code gefunden, die eine Lineare Regression zu quadratischen Daten passt:Montage einen höheren Grad Funktion PolynomialFeatures und Lineare Regression

m = 100 
X = 6 * np.random.rand(m, 1) - 3 
y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1) 
poly_features = PolynomialFeatures(degree=2, include_bias=False) 
X_poly = poly_features.fit_transform(X) 
lin_reg = LinearRegression() 
lin_reg.fit(X_poly, y) 

enter image description here

Aber wie konnte das sein? Ich weiß aus den documentation dass PolynomialFeatures(degree=2, include_bias=False) ein Array schafft, die wie folgt aussieht:

[[X[0],X[0]**2] 
[X[1],X[1]**2] 
..... 
[X[n],X[n]**2]] 

ABER: Wie ist die Lineare Regression der Lage, passen diese Daten? Bedeutet WAS ist die LinearRegression und was ist das Konzept dahinter?

Ich bin dankbar für jede Erklärung!

Antwort

2

PolynomialFeatures mit Grad zwei werden ein Array erstellen, die wie folgt aussieht:

[[1, X[0], X[0]**2] 
    [1, X[1], X[1]**2] 
    ..... 
    [1, X[n] ,X[n]**2]] 

Lassen Sie uns über X rufen Sie die Matrix. Dann wird die Lineare Regression sucht 3 Zahlen a,b,c so dass der Vektor

X* [[a],[b],[c]] - Y 

die kleinstmögliche mittlere quadratische Fehler hat (was nur der Mittelwert der Summe der Quadrate in den Vektor oben ist).

Beachten Sie, dass das Produkt X* [[a],[b],[c]] nur ein Produkt der Matrix X mit dem Spaltenvektor [a,b,c].T ist. Das Ergebnis ist ein Vektor der gleichen Dimension wie Y.

In Bezug auf die Fragen in Ihrem Kommentar:

  1. Diese Funktion ist linear in den neuen Satz von Funktionen: x, x**2. Denken Sie nur an x**2 als ein zusätzliches Feature in Ihrem Modell.

  2. Für die spezielle Anordnung in Ihrer Frage erwähnt, ist die Lineare Regression Methode für Zahlen suchen a,b,c, die die Summe minimieren

    (a * 1 + b X [0] + c X [0] ** 2-Y [0]) ** 2+ (a * 1 + b X [1] + c X [1] ** 2-Y [1]) ** 2 + .. + (a * 1 + b X [n] + c X [n] ** 2-Y [n]) ** 2

so wird es eine Reihe solcher Zahlen a,b,c finden. Daher basiert die vorgeschlagene Funktion y=a+b*x+c*x**2 nicht nur auf der ersten Zeile. Stattdessen basiert es auf allen Zeilen, da die Parameter a,b,c diejenigen sind, die die obige Summe minimieren, und diese Summe Elemente aus alle Zeilen enthält.

  1. Sobald Sie den Vektor x**2 erstellt haben, betrachten Sie die lineare Regression nur als zusätzliches Feature. Sie können ihm einen neuen Namen geben v=x**2. Dann hat die lineare Regression die Form y=a+b*x+c*v, was bedeutet, dass sie in x und v linear ist.Dem Algorithmus ist es egal, wie Sie v erstellt haben. Es behandelt nur v als eine zusätzliche Funktion.
+0

Ok danke. Nehmen wir nun an, die LinearRegression-Funktion hat die optimalen Parameter mit a = 1, b = 2 und c = 3 gefunden, als die Funktion für die erste Zeile: y = 3x ** 2 + 2x + 1. Und nun?? 1. Was macht die LinearRegression, weil diese Funktion nicht linear ist? 2. Wenn die LinearRegression dies für jede Zeile im Array tut, ist es richtig, dass in einem * m Array n lineare Regressionen berechnet werden ? Und 3. Ich verstehe immer noch nicht, wie eine lineare Regression eine gekrümmte Form bekommen kann ??? – 2Obe

+0

@ 2Beachte meine aktualisierte Antwort. –

+0

Zusätzliche Funktion bedeutet eine zusätzliche Achse richtig? So könnte die LinearRegressionskurve in einem zweidimensionalen Koordinatensystem wie eine Kurve aussehen, aber tatsächlich ist es immer noch eine gerade Linie, aber in einem höheren dimensionalen Raum? – 2Obe