Introduction
Dans ce laboratoire, nous allons apprendre à utiliser la bibliothèque scikit-learn de Python pour effectuer l'ajustement d'estimateurs linéaires robustes. Nous ajusterons une fonction sinusoïdale avec un polynôme d'ordre 3 pour des valeurs proches de zéro et démontrerons l'ajustement robuste dans différentes situations. Nous utiliserons l'écart absolu médian pour ne pas corrompre les nouvelles données pour juger de la qualité de la prédiction.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous réglerons rapidement le problème pour vous.
Importez les bibliothèques requises et générez des données
Nous devons tout d'abord importer les bibliothèques nécessaires et générer des données pour notre ajustement. Nous allons générer une fonction sinusoïdale avec du bruit et corrompre les données en introduisant des erreurs dans à la fois X et y.
from matplotlib import pyplot as plt
import numpy as np
from sklearn.linear_model import (
LinearRegression,
TheilSenRegressor,
RANSACRegressor,
HuberRegressor,
)
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
np.random.seed(42)
X = np.random.normal(size=400)
y = np.sin(X)
## Assurez-vous que X est 2D
X = X[:, np.newaxis]
X_test = np.random.normal(size=200)
y_test = np.sin(X_test)
X_test = X_test[:, np.newaxis]
y_errors = y.copy()
y_errors[::3] = 3
X_errors = X.copy()
X_errors[::3] = 3
y_errors_large = y.copy()
y_errors_large[::3] = 10
X_errors_large = X.copy()
X_errors_large[::3] = 10
Ajustez une fonction sinusoïdale avec un polynôme d'ordre 3
Nous allons ajuster une fonction sinusoïdale avec un polynôme d'ordre 3 pour des valeurs proches de zéro.
x_plot = np.linspace(X.min(), X.max())
Démontrez l'ajustement robuste dans différentes situations
Nous allons maintenant démontrer l'ajustement robuste dans différentes situations en utilisant quatre estimateurs différents : OLS, Theil-Sen, RANSAC et HuberRegressor.
estimators = [
("OLS", LinearRegression()),
("Theil-Sen", TheilSenRegressor(random_state=42)),
("RANSAC", RANSACRegressor(random_state=42)),
("HuberRegressor", HuberRegressor()),
]
colors = {
"OLS": "turquoise",
"Theil-Sen": "gold",
"RANSAC": "lightgreen",
"HuberRegressor": "black",
}
linestyle = {"OLS": "-", "Theil-Sen": "-.", "RANSAC": "--", "HuberRegressor": "--"}
lw = 3
Tracez les résultats
Nous allons maintenant tracer les résultats pour chacun des différents cas.
for title, this_X, this_y in [
("Modeling Errors Only", X, y),
("Corrupt X, Small Deviants", X_errors, y),
("Corrupt y, Small Deviants", X, y_errors),
("Corrupt X, Large Deviants", X_errors_large, y),
("Corrupt y, Large Deviants", X, y_errors_large),
]:
plt.figure(figsize=(5, 4))
plt.plot(this_X[:, 0], this_y, "b+")
for name, estimator in estimators:
model = make_pipeline(PolynomialFeatures(3), estimator)
model.fit(this_X, this_y)
mse = mean_squared_error(model.predict(X_test), y_test)
y_plot = model.predict(x_plot[:, np.newaxis])
plt.plot(
x_plot,
y_plot,
color=colors[name],
linestyle=linestyle[name],
linewidth=lw,
label="%s: error = %.3f" % (name, mse),
)
legend_title = "Error of Mean\nAbsolute Deviation\nto Non-corrupt Data"
legend = plt.legend(
loc="upper right", frameon=False, title=legend_title, prop=dict(size="x-small")
)
plt.xlim(-4, 10.2)
plt.ylim(-2, 10.2)
plt.title(title)
plt.show()
Sommaire
Dans ce laboratoire, nous avons appris à utiliser la bibliothèque scikit - learn de Python pour effectuer l'ajustement d'estimateurs linéaires robustes. Nous avons ajusté une fonction sinusoïdale avec un polynôme d'ordre 3 pour des valeurs proches de zéro et démontré l'ajustement robuste dans différentes situations. Nous avons utilisé l'écart absolu médian par rapport à de nouvelles données non corrompues pour juger de la qualité de la prédiction.