Robuste lineare Modellschätzung

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir demonstrieren, wie man mit dem RANSAC-Algorithmus in scikit-learn eine lineare Modell robust an fehlerhafte Daten anpassen kann. Der gewöhnliche lineare Regressor ist empfindlich gegenüber Ausreißern, und die gefittete Linie kann leicht von der wahren zugrunde liegenden Beziehung der Daten abgelenkt werden. Der RANSAC-Regressor teilt die Daten automatisch in Inlier und Outlier auf, und die gefittete Linie wird nur durch die identifizierten Inlier bestimmt. Wir werden das make_regression-Dataset aus scikit-learn verwenden, um zufällige Daten mit Ausreißern zu generieren, und anschließend sowohl ein lineares Modell als auch einen RANSAC-Regressor an die Daten anpassen.

VM-Tipps

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 nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in 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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49257{{"Robuste lineare Modellschätzung"}} end

Bibliotheken importieren und Daten generieren

Wir werden die erforderlichen Bibliotheken importieren, zufällige Daten mit dem make_regression-Dataset generieren und Ausreißer zu den Daten hinzufügen.

import numpy as np
from matplotlib import pyplot as plt
from sklearn import linear_model, datasets

## Generate data
n_samples = 1000
n_outliers = 50

X, y, coef = datasets.make_regression(
    n_samples=n_samples,
    n_features=1,
    n_informative=1,
    noise=10,
    coef=True,
    random_state=0,
)

## Add outlier data
np.random.seed(0)
X[:n_outliers] = 3 + 0.5 * np.random.normal(size=(n_outliers, 1))
y[:n_outliers] = -3 + 10 * np.random.normal(size=n_outliers)

Ein lineares Modell anpassen

Wir werden ein lineares Modell an die Daten mit der LinearRegression-Klasse von scikit-learn anpassen.

## Fit line using all data
lr = linear_model.LinearRegression()
lr.fit(X, y)

Einen RANSAC-Regressor anpassen

Wir werden einen RANSAC-Regressor an die Daten mit der RANSACRegressor-Klasse von scikit-learn anpassen.

## Robustly fit linear model with RANSAC algorithm
ransac = linear_model.RANSACRegressor()
ransac.fit(X, y)
inlier_mask = ransac.inlier_mask_
outlier_mask = np.logical_not(inlier_mask)

Vorhersagen für die Daten der geschätzten Modelle

Wir werden die Daten des linearen Modells und des RANSAC-Regressors vorhersagen und ihre Ergebnisse vergleichen.

## Predict data of estimated models
line_X = np.arange(X.min(), X.max())[:, np.newaxis]
line_y = lr.predict(line_X)
line_y_ransac = ransac.predict(line_X)

Vergleiche geschätzte Koeffizienten

Wir werden die geschätzten Koeffizienten des wahren Modells, des linearen Modells und des RANSAC-Regressors vergleichen.

## Compare estimated coefficients
print("Estimated coefficients (true, linear regression, RANSAC):")
print(coef, lr.coef_, ransac.estimator_.coef_)

Visualisiere die Ergebnisse

Wir werden die Daten und die zugeschnittenen Linien des linearen Modells und des RANSAC-Regressors plotten.

## Visualize the results
lw = 2
plt.scatter(
    X[inlier_mask], y[inlier_mask], color="yellowgreen", marker=".", label="Inliers"
)
plt.scatter(
    X[outlier_mask], y[outlier_mask], color="gold", marker=".", label="Outliers"
)
plt.plot(line_X, line_y, color="navy", linewidth=lw, label="Linear regressor")
plt.plot(
    line_X,
    line_y_ransac,
    color="cornflowerblue",
    linewidth=lw,
    label="RANSAC regressor",
)
plt.legend(loc="lower right")
plt.xlabel("Input")
plt.ylabel("Response")
plt.show()

Zusammenfassung

In diesem Lab haben wir gezeigt, wie man mit dem RANSAC-Algorithmus in scikit-learn robust ein lineares Modell auf fehlerhafte Daten anpasst. Wir haben mit dem make_regression-Dataset zufällige Daten generiert, den Daten Ausreißer hinzugefügt, sowohl ein lineares Modell als auch einen RANSAC-Regressor auf die Daten angepasst, die Daten der beiden Modelle vorhergesagt, ihre geschätzten Koeffizienten verglichen und die Ergebnisse visualisiert. Der RANSAC-Regressor teilt die Daten automatisch in Inlier und Outlier auf, und die zugeschnittene Linie wird ausschließlich durch die identifizierten Inlier bestimmt, was es zu einer robusteren Methode macht, um Modelle auf Daten mit Ausreißern anzupassen.