Hinweis
Zum Ende springen, um den vollständigen Beispielcode herunterzuladen oder dieses Beispiel über JupyterLite oder Binder in Ihrem Browser auszuführen.
Isotonische Regression#
Eine Veranschaulichung der isotonischen Regression an generierten Daten (nicht-linearer monotoner Trend mit homoskedastischem uniformem Rauschen).
Der Algorithmus der isotonischen Regression findet eine nicht abnehmende Annäherung einer Funktion, während er den mittleren quadratischen Fehler auf den Trainingsdaten minimiert. Der Vorteil eines solchen nicht-parametrischen Modells ist, dass es neben der Monotonie keine Form für die Zielfunktion annimmt. Zum Vergleich wird auch eine lineare Regression dargestellt.
Die Abbildung auf der rechten Seite zeigt die Modellvorhersagefunktion, die sich aus der linearen Interpolation von Schwellenpunkten ergibt. Die Schwellenpunkte sind eine Teilmenge der beobachteten Eingangsdaten des Trainingsdatensatzes und ihre entsprechenden Zielwerte werden durch die nicht-parametrische isotonische Anpassung berechnet.
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import LineCollection
from sklearn.isotonic import IsotonicRegression
from sklearn.linear_model import LinearRegression
from sklearn.utils import check_random_state
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))
Fit IsotonicRegression und LinearRegression Modelle
ir = IsotonicRegression(out_of_bounds="clip")
y_ = ir.fit_transform(x, y)
lr = LinearRegression()
lr.fit(x[:, np.newaxis], y) # x needs to be 2d for LinearRegression
Ergebnisse plotten
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()

Beachten Sie, dass wir explizit out_of_bounds="clip" an den Konstruktor von IsotonicRegression übergeben haben, um die Art und Weise zu steuern, wie das Modell außerhalb des im Trainingsdatensatz beobachteten Datenbereichs extrapoliert. Diese "Clipping"-Extrapolation ist in der Abbildung der Entscheidungsfunktion auf der rechten Seite zu sehen.
Gesamtlaufzeit des Skripts: (0 Minuten 0,119 Sekunden)
Verwandte Beispiele
Auswirkung der Transformation der Ziele in einem Regressionsmodell
Pipelining: Verkettung einer PCA und einer logistischen Regression
Wahrscheinlichkeitskalibrierung von Klassifikatoren