Bitte erstell ein neues Jupyter-Notebook und nennen esRegression
.
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.