Regression

Bitte erstellen Sie ein neues Jupyter-Notebook und nennen es Regression.

Hier führen wir eine einfache Regression von zwei Features (also in zwei Dimensionen durch), da dies sich leichter visualisieren lässt. Tatsächlich ist man aber in der Anzahl an Features nicht eingeschränkt. Ziel ist es ein Regression-Model zu erstellen, in dem man einen numerischen Eingabe-Wert (x) eingibt und einen numerischen Ausgabe-Wert (y) erhält.

Wir erzeugen und ein künstlichen Datenset von 500 Datenpunkten mit Hilfe der Funktion make_regression. Mit dem Parameter noise können wir angeben, wie verauscht die Daten sein sollen.

from sklearn.datasets import make_regression
X_reg, y_reg = make_regression(n_samples=500, n_features=1, noise=20, random_state=1)

Kurzer Blick auf die Daten:

X_reg

und die Dimensionen der Matrix:

X_reg.shape

und Länge des Ziel-Vektors:

y_reg.shape

Wir können die Daten zweidimensional plotten. Die x-Achse stellt die Eingangswerte dar, die y-Achse die davon abhängigen Werte. Mit X_reg[:, 0] wird die erste und einzige Spalte, der prinzipiel n-dimensionalen Input-Werte-Matrix genutzt.

import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(X_reg[:, 0], y_reg, ".")

Wir möchten für diese Daten eine lineares Regression-Modell erstellen, laden dafür die nötige Klasse und erstellen eine Instanz davon. Noch einmal zur Erinnerung - ein lineare Modell wir durch folgende Formel beschrieben:

y = w_1 * x_1 + w_2 * x_2 + … + w_n * x_n + b

Beim Fitten werden die w-Parameter und der b-Parameter mit Werten versehen.

from sklearn.linear_model import LinearRegression
linear_regression = LinearRegression()

Wir teilen unsere Daten für eine spätere Bewertung der Güte in ein Trainings- und ein Testset auf.

from sklearn.model_selection import train_test_split
X_reg_train, X_reg_test, y_reg_train, y_reg_test = train_test_split(X_reg, y_reg)

Das Fitting der Parameter erfolg mit der Methode fit.

linear_regression.fit(X_reg_train, y_reg_train)

Wir können uns jetzt die Koeffizienten also in diesem nut Fall w_1 anschauen. Die Gerade hat also die Steigung 21.4.

linear_regression.coef_

Zudem gibt es noch den y-Achsen-Abschnit bei 0 (Intercept).

linear_regression.intercept_

Wir können nun die Trainingsdaten und die Gerade, die das lineare Modell repräsentiert, in einem Plot darstellen.

plt.plot(X_reg_train, y_reg_train, ".")
y_lm_predicted = linear_regression.predict(X_reg_train)
plt.plot(X_reg_train, y_lm_predicted, ".")

Dieses trainierte Modell kann nun auf neue Werte angewandt werden. Zum Beipiel unserer Test-Datenset:

linear_regression.predict(X_reg_test)

Für das Testdatenset kennen wir die tatsächlichen y-Werte und können mit der Methode score eine Vorraussage durchführen und diese mit den Werten vergleichen um die Güte der Voraussage zu bewerten.

linear_regression.score(X_reg_test, y_reg_test)

Das gleiche Vorgehene können wir nun mit anderen Regression-Methoden nutzen. Zum Beispiel mit der SVM-Methode

from sklearn.svm import SVR
svm_regression = SVR()
svm_regression.fit(X_reg_train, y_reg_train)
svm_regression.score(X_reg_test, y_reg_test)

Auch hier gibt es wieder viele weitere Regressionsmethoden, wir belassen es aber bei diesen Beispielen.