Einführung
In diesem Tutorial lernen wir die isotone Regression kennen, eine nicht-parametrische Regressionsmethode, die eine nicht-abnehmende Näherung einer Funktion findet, während der mittlere quadratische Fehler auf den Trainingsdaten minimiert wird. Wir werden die beliebte Python-Machine-Learning-Bibliothek scikit-learn verwenden, um die isotone Regression zu implementieren und sie mit der linearen Regression zu vergleichen.
Tipps für die VM
Nachdem die VM gestartet ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Importieren der erforderlichen Bibliotheken
Wir beginnen mit dem Importieren der erforderlichen Bibliotheken für dieses Tutorial, nämlich NumPy, Matplotlib und scikit-learn.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from sklearn.linear_model import LinearRegression
from sklearn.isotonic import IsotonicRegression
from sklearn.utils import check_random_state
Daten generieren
Als nächstes werden wir einige Daten generieren, die wir für unsere Regression verwenden. Wir werden einen nicht-linearen monotonen Trend mit homoskedastischem gleichförmigem Rauschen erstellen.
n = 100
x = np.arange(n)
rs = check_random_state(0)
y = rs.randint(-50, 50, size=(n,)) + 50.0 * np.log1p(np.arange(n))
Isotone und lineare Regressionsmodelle anpassen
Wir werden nun sowohl das isotone als auch das lineare Regressionsmodell an die generierten Daten anpassen.
ir = IsotonicRegression(out_of_bounds="clip")
y_ = ir.fit_transform(x, y)
lr = LinearRegression()
lr.fit(x[:, np.newaxis], y) ## x muss 2d für LinearRegression sein
Ergebnisse plotten
Schließlich werden wir die Ergebnisse beider Regressionsmodelle plotten, um zu visualisieren, wie gut sie die Daten anpassen.
segments = [[[i, y[i]], [i, y_[i]]] for i in range(n)]
lc = LineCollection(segments, zorder=0)
lc.set_array(np.ones(len(y)))
lc.set_linewidths(np.full(n, 0.5))
fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(12, 6))
ax0.plot(x, y, "C0.", markersize=12)
ax0.plot(x, y_, "C1.-", markersize=12)
ax0.plot(x, lr.predict(x[:, np.newaxis]), "C2-")
ax0.add_collection(lc)
ax0.legend(("Training data", "Isotonic fit", "Linear fit"), loc="lower right")
ax0.set_title("Isotonic regression fit on noisy data (n=%d)" % n)
x_test = np.linspace(-10, 110, 1000)
ax1.plot(x_test, ir.predict(x_test), "C1-")
ax1.plot(ir.X_thresholds_, ir.y_thresholds_, "C1.", markersize=12)
ax1.set_title("Prediction function (%d thresholds)" % len(ir.X_thresholds_))
plt.show()
Zusammenfassung
In diesem Tutorial haben wir uns mit der isotonen Regression beschäftigt, einer nicht-parametrischen Regressionsmethode, die eine nicht-abnehmende Näherung einer Funktion findet, während der mittlere quadratische Fehler auf den Trainingsdaten minimiert wird. Wir haben auch die isotonen Regression mit scikit-learn implementiert und sie mit der linearen Regression verglichen.