Theil-Sen-Regression mit Python Scikit-Learn

Beginner

This tutorial is from open-source community. Access the source code

Einführung

In diesem Tutorial lernen wir die Theil-Sen-Regression und deren Implementierung mit der Python-Bibliothek scikit-learn kennen. Wir werden auch sehen, wie sie sich von der einfachen kleinsten Quadrate (OLS)-Regression und der robusten Zufallsstichprobenkonsensus (RANSAC)-Regression unterscheidet.

Tipps für die virtuelle Maschine

Nachdem der Start der virtuellen Maschine abgeschlossen 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.

Bibliotheken importieren und Datensatz generieren

Zunächst importieren wir die erforderlichen Bibliotheken und generieren einen synthetischen Datensatz für die Regressionsanalyse.

import time
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, TheilSenRegressor
from sklearn.linear_model import RANSACRegressor

np.random.seed(0)
n_samples = 200
x = np.random.randn(n_samples)
w = 3.0
c = 2.0
noise = 0.1 * np.random.randn(n_samples)
y = w * x + c + noise
X = x[:, np.newaxis]

Die Daten plotten

Lassen Sie uns nun den generierten Datensatz plotten.

plt.scatter(x, y, color="indigo", marker="x", s=40)
plt.axis("tight")
_ = plt.title("Original Data")

Lineare Regressionsmodelle anpassen

Als nächstes werden wir drei lineare Regressionsmodelle mit den Methoden OLS, Theil-Sen und RANSAC anpassen.

estimators = [
    ("OLS", LinearRegression()),
    ("Theil-Sen", TheilSenRegressor(random_state=42)),
    ("RANSAC", RANSACRegressor(random_state=42)),
]
colors = {"OLS": "turquoise", "Theil-Sen": "gold", "RANSAC": "lightgreen"}
lw = 2

line_x = np.array([-3, 3])
for name, estimator in estimators:
    t0 = time.time()
    estimator.fit(X, y)
    elapsed_time = time.time() - t0
    y_pred = estimator.predict(line_x.reshape(2, 1))
    plt.plot(
        line_x,
        y_pred,
        color=colors[name],
        linewidth=lw,
        label="%s (fit time: %.2fs)" % (name, elapsed_time),
    )

Die Regressionslinien plotten

Schließlich werden wir die Regressionslinien der angepassten Modelle plotten.

plt.axis("tight")
plt.legend(loc="upper left")
_ = plt.title("Regression Lines")

Zusammenfassung

In diesem Tutorial haben wir über die Theil-Sen-Regression und ihre Implementierung mit der Python-Bibliothek scikit-learn gelernt. Wir haben auch gesehen, wie sie sich von der Ordinary Least Squares (OLS)-Regression und der Robust Random Sample Consensus (RANSAC)-Regression unterscheidet. Indem wir die obigen Schritte folgten, konnten wir einen synthetischen Datensatz generieren, lineare Regressionsmodelle anpassen und die Regressionslinien plotten.