Tracer Huber vs Ridge

Machine LearningMachine LearningBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous comparerons les performances de deux modèles de régression, HuberRegressor et Ridge, sur un ensemble de données avec de forts outliers. Nous générerons un ensemble de données fictif, y ajouterons de forts outliers, puis ajusterons les deux modèles à l'ensemble de données. Nous visualiserons les résultats et comparerons les performances des modèles.

Conseils sur la VM

Une fois le démarrage de la VM 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ésoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49160{{"Tracer Huber vs Ridge"}} sklearn/datasets -.-> lab-49160{{"Tracer Huber vs Ridge"}} ml/sklearn -.-> lab-49160{{"Tracer Huber vs Ridge"}} end

Importation des bibliothèques requises

Nous commencerons par importer les bibliothèques requises, y compris numpy et matplotlib pour la manipulation et la visualisation des données, et HuberRegressor et Ridge de scikit-learn pour la modélisation de régression.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.linear_model import HuberRegressor, Ridge

Générer des données fictives

Nous allons maintenant générer un ensemble de données fictives à l'aide de la fonction make_regression de scikit-learn. Nous allons générer un ensemble de données avec 20 échantillons, une caractéristique et une graine aléatoire de 0. Nous ajouterons également du bruit à l'ensemble de données.

rng = np.random.RandomState(0)
X, y = make_regression(
    n_samples=20, n_features=1, random_state=0, noise=4.0, bias=100.0
)

Ajouter de forts outliers à l'ensemble de données

Nous allons ajouter quatre forts outliers à l'ensemble de données. Nous allons générer des valeurs aléatoires pour ces outliers en utilisant la distribution normale. Nous ajouterons ensuite ces outliers à l'ensemble de données.

X_outliers = rng.normal(0, 0.5, size=(4, 1))
y_outliers = rng.normal(0, 2.0, size=4)
X_outliers[:2, :] += X.max() + X.mean() / 4.0
X_outliers[2:, :] += X.min() - X.mean() / 4.0
y_outliers[:2] += y.min() - y.mean() / 4.0
y_outliers[2:] += y.max() + y.mean() / 4.0
X = np.vstack((X, X_outliers))
y = np.concatenate((y, y_outliers))

Visualiser l'ensemble de données

Nous allons maintenant visualiser l'ensemble de données à l'aide de matplotlib. Nous allons tracer les valeurs de X en fonction des valeurs de y.

plt.plot(X, y, "b.")
plt.title("Dataset with Strong Outliers")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Ajuster le régresseur Huber

Nous allons maintenant ajuster le HuberRegressor à l'ensemble de données. Nous allons ajuster le modèle pour une plage de valeurs d'epsilon pour montrer comment la fonction de décision approche celle de la régression Ridge à mesure que la valeur d'epsilon augmente.

## Définir la plage de valeurs pour epsilon
epsilon_values = [1, 1.5, 1.75, 1.9]

## Définir les valeurs de x pour le tracé
x = np.linspace(X.min(), X.max(), 7)

## Définir les couleurs pour le tracé
colors = ["r-", "b-", "y-", "m-"]

## Ajuster le régresseur Huber pour une série de valeurs d'epsilon.
for k, epsilon in enumerate(epsilon_values):
    huber = HuberRegressor(alpha=0.0, epsilon=epsilon)
    huber.fit(X, y)
    coef_ = huber.coef_ * x + huber.intercept_
    plt.plot(x, coef_, colors[k], label="huber loss, %s" % epsilon)

## Ajouter une légende au tracé
plt.legend(loc=0)

## Afficher le tracé
plt.title("HuberRegressor avec différentes valeurs d'epsilon")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Ajuster le régresseur Ridge

Nous allons maintenant ajuster le régresseur Ridge à l'ensemble de données et comparer ses performances à celles du HuberRegressor.

## Ajuster un régresseur Ridge pour le comparer au régresseur Huber.
ridge = Ridge(alpha=0.0, random_state=0)
ridge.fit(X, y)
coef_ridge = ridge.coef_
coef_ = ridge.coef_ * x + ridge.intercept_
plt.plot(x, coef_, "g-", label="ridge regression")

## Ajouter une légende au tracé
plt.legend(loc=0)

## Afficher le tracé
plt.title("Comparaison de HuberRegressor et Ridge")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Sommaire

Dans ce laboratoire, nous avons comparé les performances de deux modèles de régression, HuberRegressor et Ridge, sur un ensemble de données avec de forts outliers. Nous avons généré un ensemble de données fictif, y avons ajouté de forts outliers, puis avons ajusté les deux modèles à l'ensemble de données. Nous avons visualisé les résultats et comparé les performances des modèles. Nous avons observé que le HuberRegressor était moins influencé par les outliers que le régresseur Ridge, et que à mesure que la valeur d'epsilon augmentait, la fonction de décision du HuberRegressor approchait celle du régresseur Ridge.