Читать книгу Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow - Aurélien Géron - Страница 124
Polynomielle Regression
ОглавлениеWie sieht es aus, wenn Ihre Daten komplexer als eine gerade Linie sind? Überraschenderweise können wir auch nichtlineare Daten mit einem linearen Modell fitten. Dazu können wir einfach Potenzen jedes Merkmals als neue Merkmale hinzufügen und dann ein lineares Modell auf diesem erweiterten Merkmalssatz trainieren. Diese Technik nennt man polynomielle Regression.
Betrachten wir ein Beispiel. Zunächst generieren wir einige nichtlineare Daten anhand einer einfachen quadratischen Gleichung7 (zuzüglich von etwas Rauschen; siehe Abbildung 4-12):
m = 100
X = 6 * np.random.rand(m, 1) - 3
y = 0.5 *X**2 + X + 2 + np.random.randn(m, 1)
Abbildung 4-12: Generierte nichtlineare verrauschte Daten
Offensichtlich lassen sich diese Daten nicht angemessen mit einer Geraden fitten. Daher verwenden wir die Scikit-Learn-Klasse PolynomialFeatures, um unsere Trainingsdaten zu transformieren und zu jedem Merkmal in den Trainingsdaten dessen Quadrat (das Polynom 2. Grades) als neues Merkmal hinzuzufügen (in diesem Fall gibt es nur ein Merkmal):
>>> from sklearn.preprocessing import PolynomialFeatures
>>> poly_features = PolynomialFeatures(degree=2, include_bias=False)
>>> X_poly = poly_features.fit_transform(X)
>>> X[0]
array([-0.75275929])
>>> X_poly[0]
array([-0.75275929, 0.56664654])
X_poly enthält jetzt das ursprüngliche Merkmal aus X sowie das Quadrat dieses Merkmals. Nun können Sie ein mit LinearRegression erstelltes Modell auf diese erweiterten Trainingsdaten anwenden (Abbildung 4-13):
>>> lin_reg = LinearRegression()
>>> lin_reg.fit(X_poly, y)
>>> lin_reg.intercept_, lin_reg.coef_
(array([ 1.78134581]), array([[ 0.93366893, 0.56456263]]))
Nicht schlecht: Das Modell schätzt ŷ = 0,5621 + 0,93x1 + 1,78, während die ursprüngliche Funktion y = 0,5x12 + 1,0x1 + 2,0 normalverteiltes Rauschen lautete.
Wenn es mehrere Merkmale gibt, ist die polynomielle Regression in der Lage, Wechselbeziehungen zwischen Merkmalen zu finden (was ein einfaches lineares Regressionsmodell nicht kann). Dies ist dadurch möglich, dass PolynomialFeatures bis zu einem bestimmten Grad sämtliche Kombinationen von Merkmalen hinzufügt. Wenn es beispielsweise zwei Merkmale a und b gibt, erzeugt PolynomialFeatures mit degree=3 nicht nur die Merkmale a2, a3, b2 und b3, sondern auch die Kombinationen ab, a2b und ab2.
Abbildung 4-13: Vorhersagen eines polynomiellen Regressionsmodells
PolynomialFeatures(degree=d) transformiert ein Array mit n Merkmalen in ein Array mit Merkmalen, wobei n! die Fakultät von n ist, also 1 × 2 × 3 × … × n. Hüten Sie sich vor der kombinatorischen Explosion bei der Anzahl der Merkmale! |