Probabilités de classes avec VotingClassifier

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 apprendre à tracer les probabilités de classes calculées par le VotingClassifier dans Scikit-Learn. Nous utiliserons trois classifieurs différents, y compris LogisticRegression, GaussianNB et RandomForestClassifier, et calculerons la moyenne de leurs probabilités prédites en utilisant le VotingClassifier. Nous visualiserons ensuite le poids des probabilités en ajustant chaque classifieur sur l'ensemble d'entraînement et en traçant les probabilités de classes prédites pour le premier échantillon du jeu de 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 pratiquer.

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) 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") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49329{{"Probabilités de classes avec VotingClassifier"}} sklearn/naive_bayes -.-> lab-49329{{"Probabilités de classes avec VotingClassifier"}} sklearn/ensemble -.-> lab-49329{{"Probabilités de classes avec VotingClassifier"}} ml/sklearn -.-> lab-49329{{"Probabilités de classes avec VotingClassifier"}} end

Initialiser les classifieurs et le jeu de données

Nous allons tout d'abord initialiser trois classifieurs et un jeu de données d'exemple. Nous utiliserons LogisticRegression, GaussianNB et RandomForestClassifier comme classifieurs, et X et y comme jeu de données d'exemple.

import numpy as np
import matplotlib.pyplot as plt

from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier

clf1 = LogisticRegression(max_iter=1000, random_state=123)
clf2 = RandomForestClassifier(n_estimators=100, random_state=123)
clf3 = GaussianNB()
X = np.array([[-1.0, -1.0], [-1.2, -1.4], [-3.4, -2.2], [1.1, 1.2]])
y = np.array([1, 1, 2, 2])

Initialiser le VotingClassifier

Nous allons ensuite initialiser un VotingClassifier à vote mol avec des poids [1, 1, 5], ce qui signifie que les probabilités prédites du RandomForestClassifier comptent 5 fois plus que les poids des autres classifieurs lors du calcul de la probabilité moyenne.

eclf = VotingClassifier(
    estimators=[("lr", clf1), ("rf", clf2), ("gnb", clf3)],
    voting="soft",
    weights=[1, 1, 5],
)

Prédire les probabilités de classes pour tous les classifieurs

Nous allons prédire les probabilités de classes pour tous les classifieurs en utilisant la fonction predict_proba().

probas = [c.fit(X, y).predict_proba(X) for c in (clf1, clf2, clf3, eclf)]

Obtenir les probabilités de classes pour le premier échantillon du jeu de données

Nous allons obtenir les probabilités de classes pour le premier échantillon du jeu de données et les stocker dans class1_1 et class2_1.

class1_1 = [pr[0, 0] for pr in probas]
class2_1 = [pr[0, 1] for pr in probas]

Tracer les probabilités de classes

Nous allons tracer les probabilités de classes pour chaque classifieur et le VotingClassifier à l'aide d'un graphique à barres.

N = 4  ## nombre de groupes
ind = np.arange(N)  ## positions des groupes
width = 0.35  ## largeur des barres

fig, ax = plt.subplots()

## barres pour le classifieur 1-3
p1 = ax.bar(ind, np.hstack(([class1_1[:-1], [0]])), width, color="green", edgecolor="k")
p2 = ax.bar(
    ind + width,
    np.hstack(([class2_1[:-1], [0]])),
    width,
    color="lightgreen",
    edgecolor="k",
)

## barres pour le VotingClassifier
p3 = ax.bar(ind, [0, 0, 0, class1_1[-1]], width, color="blue", edgecolor="k")
p4 = ax.bar(
    ind + width, [0, 0, 0, class2_1[-1]], width, color="steelblue", edgecolor="k"
)

## annotations du tracé
plt.axvline(2.8, color="k", linestyle="dashed")
ax.set_xticks(ind + width)
ax.set_xticklabels(
    [
        "LogisticRegression\npoids 1",
        "GaussianNB\npoids 1",
        "RandomForestClassifier\npoids 5",
        "VotingClassifier\n(probabilités moyennes)",
    ],
    rotation=40,
    ha="right",
)
plt.ylim([0, 1])
plt.title("Probabilités de classes pour l'échantillon 1 par différents classifieurs")
plt.legend([p1[0], p2[0]], ["classe 1", "classe 2"], loc="upper left")
plt.tight_layout()
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à tracer les probabilités de classes calculées par le VotingClassifier dans Scikit-Learn. Nous avons utilisé trois classifieurs différents, y compris LogisticRegression, GaussianNB et RandomForestClassifier, et avons calculé la moyenne de leurs probabilités prédites en utilisant le VotingClassifier. Nous avons ensuite visualisé le poids des probabilités en ajustant chaque classifieur sur l'ensemble d'entraînement et en traçant les probabilités de classes prédites pour le premier échantillon du jeu de données.