Estimation de modèle linéaire robuste

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 allons démontrer comment ajuster robustement un modèle linéaire à des données fautives à l'aide de l'algorithme RANSAC dans scikit-learn. Le régresseur linéaire ordinaire est sensible aux valeurs aberrantes, et la droite ajustée peut facilement être déviée de la vraie relation sous-jacente des données. Le régresseur RANSAC divise automatiquement les données en données cohérentes et valeurs aberrantes, et la droite ajustée est déterminée uniquement par les données cohérentes identifiées. Nous allons utiliser le jeu de données make_regression de scikit-learn pour générer des données aléatoires avec des valeurs aberrantes, puis ajuster à la fois un modèle linéaire et un régresseur RANSAC aux données.

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 limites de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous réglerons rapidement le problème pour vous.


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{{"Estimation de modèle linéaire robuste"}} end

Importation des bibliothèques et génération des données

Nous allons importer les bibliothèques nécessaires, générer des données aléatoires à l'aide du jeu de données make_regression, et ajouter des valeurs aberrantes aux données.

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

## Générer des données
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,
)

## Ajouter des données aberrantes
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)

Ajuster un modèle linéaire

Nous allons ajuster un modèle linéaire aux données à l'aide de la classe LinearRegression de scikit-learn.

## Ajuster la droite en utilisant toutes les données
lr = linear_model.LinearRegression()
lr.fit(X, y)

Ajuster un régresseur RANSAC

Nous allons ajuster un régresseur RANSAC aux données à l'aide de la classe RANSACRegressor de scikit-learn.

## Ajuster robustement un modèle linéaire avec l'algorithme RANSAC
ransac = linear_model.RANSACRegressor()
ransac.fit(X, y)
inlier_mask = ransac.inlier_mask_
outlier_mask = np.logical_not(inlier_mask)

Prédire les données des modèles estimés

Nous allons prédire les données du modèle linéaire et du régresseur RANSAC et comparer leurs résultats.

## Prédire les données des modèles estimés
line_X = np.arange(X.min(), X.max())[:, np.newaxis]
line_y = lr.predict(line_X)
line_y_ransac = ransac.predict(line_X)

Comparer les coefficients estimés

Nous allons comparer les coefficients estimés du modèle réel, du modèle linéaire et du régresseur RANSAC.

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

Visualiser les résultats

Nous allons tracer les données et les droites ajustées du modèle linéaire et du régresseur RANSAC.

## 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()

Sommaire

Dans ce laboratoire, nous avons démontré comment ajuster robustement un modèle linéaire à des données fautives à l'aide de l'algorithme RANSAC dans scikit-learn. Nous avons généré des données aléatoires à l'aide de l'ensemble de données make_regression, ajouté des anomalies aux données, ajusté à la fois un modèle linéaire et un régresseur RANSAC aux données, prédit les données des deux modèles, comparé leurs coefficients estimés et visualisé les résultats. Le régresseur RANSAC divise automatiquement les données en données cohérentes et anomalies, et la droite ajustée est déterminée uniquement par les données cohérentes identifiées, ce qui en fait une méthode plus robuste pour ajuster des modèles à des données avec des anomalies.