Comparaison de l'étalonnage des classifieurs

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 l'étalonnage de quatre modèles différents : la Régression Logistique, le Bayes Naïf Gaussien, le Classifieur Forestier Aléatoire et le SVM Linéaire. Des courbes d'étalonnage seront tracées pour chaque modèle, qui montrent la relation entre les probabilités prédites et les résultats réels. Cela est important car les modèles bien étalonnés produisent des probabilités précises et fiables.

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 Carnet de notes pour accéder au carnet Jupyter pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.

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/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/naive_bayes("Naive Bayes") sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/calibration("Probability Calibration") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49088{{"Comparaison de l'étalonnage des classifieurs"}} sklearn/naive_bayes -.-> lab-49088{{"Comparaison de l'étalonnage des classifieurs"}} sklearn/ensemble -.-> lab-49088{{"Comparaison de l'étalonnage des classifieurs"}} sklearn/svm -.-> lab-49088{{"Comparaison de l'étalonnage des classifieurs"}} sklearn/model_selection -.-> lab-49088{{"Comparaison de l'étalonnage des classifieurs"}} sklearn/calibration -.-> lab-49088{{"Comparaison de l'étalonnage des classifieurs"}} sklearn/datasets -.-> lab-49088{{"Comparaison de l'étalonnage des classifieurs"}} ml/sklearn -.-> lab-49088{{"Comparaison de l'étalonnage des classifieurs"}} end

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

Nous commençons par importer les bibliothèques nécessaires et en générant un jeu de données de classification binaire synthétique avec 100 000 échantillons et 20 caractéristiques. Parmi les 20 caractéristiques, seulement 2 sont informatives, 2 sont redondantes et les 16 restantes sont non informatives. Parmi les 100 000 échantillons, 100 seront utilisés pour l'ajustement du modèle et le reste pour les tests.

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

## Générer le jeu de données
X, y = make_classification(
    n_samples=100_000, n_features=20, n_informative=2, n_redundant=2, random_state=42
)

train_samples = 100  ## Échantillons utilisés pour entraîner les modèles
X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    shuffle=False,
    test_size=100_000 - train_samples,
)

Tracer les courbes d'étalonnage

Nous entraînons chacun des quatre modèles avec le petit ensemble d'entraînement et traçons les courbes d'étalonnage en utilisant les probabilités prédites du jeu de test. Les courbes d'étalonnage sont créées en classant les probabilités prédites, puis en traçant la probabilité prédite moyenne dans chaque classe contre la fréquence observée ('fraction de positifs'). En dessous de la courbe d'étalonnage, nous traçons un histogramme montrant la distribution des probabilités prédites ou plus précisément, le nombre d'échantillons dans chaque classe de probabilité prédite.

import numpy as np
from sklearn.svm import LinearSVC
from sklearn.calibration import CalibrationDisplay
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

## Créer des classifieurs
lr = LogisticRegression()
gnb = GaussianNB()
svc = NaivelyCalibratedLinearSVC(C=1.0, dual="auto")
rfc = RandomForestClassifier()

clf_list = [
    (lr, "Logistic"),
    (gnb, "Naive Bayes"),
    (svc, "SVC"),
    (rfc, "Random forest"),
]

fig = plt.figure(figsize=(10, 10))
gs = GridSpec(4, 2)
colors = plt.get_cmap("Dark2")

ax_calibration_curve = fig.add_subplot(gs[:2, :2])
calibration_displays = {}
markers = ["^", "v", "s", "o"]
for i, (clf, name) in enumerate(clf_list):
    clf.fit(X_train, y_train)
    display = CalibrationDisplay.from_estimator(
        clf,
        X_test,
        y_test,
        n_bins=10,
        name=name,
        ax=ax_calibration_curve,
        color=colors(i),
        marker=markers[i],
    )
    calibration_displays[name] = display

ax_calibration_curve.grid()
ax_calibration_curve.set_title("Calibration plots")

## Ajouter l'histogramme
grid_positions = [(2, 0), (2, 1), (3, 0), (3, 1)]
for i, (_, name) in enumerate(clf_list):
    row, col = grid_positions[i]
    ax = fig.add_subplot(gs[row, col])

    ax.hist(
        calibration_displays[name].y_prob,
        range=(0, 1),
        bins=10,
        label=name,
        color=colors(i),
    )
    ax.set(title=name, xlabel="Mean predicted probability", ylabel="Count")

plt.tight_layout()
plt.show()

Interpréter les courbes d'étalonnage

Les courbes d'étalonnage montrent la relation entre les probabilités prédites et les résultats réels pour chaque modèle. Les modèles bien étalonnés produisent des courbes qui suivent la ligne diagonale, indiquant que les probabilités prédites correspondent aux résultats réels. Les quatre modèles produisent des résultats différents :

  • La régression logistique produit des prédictions bien étalonnées car elle optimise directement la perte logarithmique.
  • Le Bayes Naïf Gaussien a tendance à pousser les probabilités vers 0 ou 1, principalement parce que l'équation du Bayes naïf ne fournit une estimation correcte des probabilités que lorsque l'hypothèse selon laquelle les caractéristiques sont indépendantes conditionnellement est vérifiée.
  • Le Classifieur Forestier Aléatoire montre un comportement opposé : les histogrammes montrent des pics à environ 0,2 et 0,9 de probabilité, tandis que les probabilités proches de 0 ou 1 sont très rares.
  • Le SVM Linéaire montre une courbe encore plus sigmoïde que le Classifieur Forestier Aléatoire, ce qui est typique des méthodes à marge maximale.

Conclusion

Dans ce laboratoire, nous avons comparé l'étalonnage de quatre modèles différents : la Régression Logistique, le Bayes Naïf Gaussien, le Classifieur Forestier Aléatoire et le SVM Linéaire. Nous avons tracé les courbes d'étalonnage pour chaque modèle et observé que les modèles bien étalonnés produisent des courbes qui suivent la ligne diagonale. Les quatre modèles ont produit des résultats différents, la Régression Logistique étant bien étalonnée et les autres modèles montrant différents degrés de biais. L'étalonnage est un aspect important des modèles d'apprentissage automatique, et les modèles bien étalonnés produisent des probabilités précises et fiables.

Sommaire

Félicitations ! Vous avez terminé le laboratoire de Comparaison de l'étalonnage des classifieurs. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.