Tracer la probabilité de classification

Beginner

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

Introduction

Ce laboratoire montre comment tracer la probabilité de classification de différents classifieurs à l'aide de Scikit-learn en Python. Nous utiliserons un ensemble de données à 3 classes, et nous le classifierons avec un classifieur à vecteurs de support, une régression logistique pénalisée L1 et L2 avec un paramétrage One-Vs-Rest ou multinomial, et une classification par processus gaussien.

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

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 votre feedback après la session, et nous résoudrons rapidement le problème pour vous.

Importation des bibliothèques nécessaires

Nous commençons par importer les bibliothèques nécessaires pour le laboratoire.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import RBF
from sklearn import datasets

Charger l'ensemble de données

Ensuite, nous chargeons l'ensemble de données iris à partir de Scikit-learn.

iris = datasets.load_iris()
X = iris.data[:, 0:2]  ## we only take the first two features for visualization
y = iris.target
n_features = X.shape[1]

Définir les classifieurs

Nous définissons différents classifieurs pour l'ensemble de données.

C = 10
kernel = 1.0 * RBF([1.0, 1.0])  ## pour GPC

## Créer différents classifieurs.
classifiers = {
    "Logistique L1": LogisticRegression(
        C=C, penalty="l1", solver="saga", multi_class="multinomial", max_iter=10000
    ),
    "Logistique L2 (Multinomiale)": LogisticRegression(
        C=C, penalty="l2", solver="saga", multi_class="multinomial", max_iter=10000
    ),
    "Logistique L2 (OvR)": LogisticRegression(
        C=C, penalty="l2", solver="saga", multi_class="ovr", max_iter=10000
    ),
    "SVC linéaire": SVC(kernel="linear", C=C, probability=True, random_state=0),
    "GPC": GaussianProcessClassifier(kernel),
}

Visualiser la probabilité de classification

Nous visualisons la probabilité de classification pour chaque classifieur.

n_classifiers = len(classifiers)

plt.figure(figsize=(3 * 2, n_classifiers * 2))
plt.subplots_adjust(bottom=0.2, top=0.95)

xx = np.linspace(3, 9, 100)
yy = np.linspace(1, 5, 100).T
xx, yy = np.meshgrid(xx, yy)
Xfull = np.c_[xx.ravel(), yy.ravel()]

for index, (name, classifier) in enumerate(classifiers.items()):
    classifier.fit(X, y)

    y_pred = classifier.predict(X)
    accuracy = accuracy_score(y, y_pred)
    print("Précision (entraînement) pour %s: %0.1f%% " % (name, accuracy * 100))

    ## Voir les probabilités :
    probas = classifier.predict_proba(Xfull)
    n_classes = np.unique(y_pred).size
    for k in range(n_classes):
        plt.subplot(n_classifiers, n_classes, index * n_classes + k + 1)
        plt.title("Classe %d" % k)
        if k == 0:
            plt.ylabel(name)
        imshow_handle = plt.imshow(
            probas[:, k].reshape((100, 100)), extent=(3, 9, 1, 5), origin="lower"
        )
        plt.xticks(())
        plt.yticks(())
        idx = y_pred == k
        if idx.any():
            plt.scatter(X[idx, 0], X[idx, 1], marker="o", c="w", edgecolor="k")

ax = plt.axes([0.15, 0.04, 0.7, 0.05])
plt.title("Probabilité")
plt.colorbar(imshow_handle, cax=ax, orientation="horizontal")

plt.show()

Sommaire

Ce laboratoire a démontré comment tracer la probabilité de classification pour différents classifieurs à l'aide de Scikit-learn en Python. Nous avons chargé l'ensemble de données iris, défini différents classifieurs et visualisé la probabilité de classification pour chaque classifieur.