Probabilidades de Classe com VotingClassifier

Beginner

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

Introdução

Neste laboratório, aprenderemos a representar as probabilidades de classe calculadas pelo VotingClassifier no Scikit-Learn. Usaremos três classificadores diferentes, incluindo LogisticRegression, GaussianNB e RandomForestClassifier, e calculamos a média das probabilidades previstas usando o VotingClassifier. Em seguida, visualizaremos a ponderação das probabilidades ajustando cada classificador no conjunto de treino e representando as probabilidades de classe previstas para a primeira amostra do conjunto de dados.

Dicas da Máquina Virtual

Após o arranque da VM, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para si.

Inicializar os Classificadores e o Conjunto de Dados

Primeiro, inicializaremos três classificadores e um conjunto de dados de exemplo. Usaremos LogisticRegression, GaussianNB e RandomForestClassifier como classificadores, e X e y como o conjunto de dados de exemplo.

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])

Inicializar o VotingClassifier

Em seguida, inicializaremos um VotingClassifier de votação suave com pesos [1, 1, 5]. Isso significa que as probabilidades previstas do RandomForestClassifier contam 5 vezes mais do que os pesos dos outros classificadores quando a probabilidade média é calculada.

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

Prever Probabilidades de Classe para todos os Classificadores

Preveremos as probabilidades de classe para todos os classificadores usando a função predict_proba().

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

Obter Probabilidades de Classe para a Primeira Amostra no Conjunto de Dados

Obteremos as probabilidades de classe para a primeira amostra no conjunto de dados e armazená-las em class1_1 e class2_1.

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

Plotar as Probabilidades de Classe

Plotaremos as probabilidades de classe para cada classificador e o VotingClassifier usando um gráfico de barras.

N = 4  ## número de grupos
ind = np.arange(N)  ## posições dos grupos
width = 0.35  ## largura da barra

fig, ax = plt.subplots()

## barras para os classificadores 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",
)

## barras para o 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"
)

## anotações do gráfico
plt.axvline(2.8, color="k", linestyle="dashed")
ax.set_xticks(ind + width)
ax.set_xticklabels(
    [
        "LogisticRegression\npeso 1",
        "GaussianNB\npeso 1",
        "RandomForestClassifier\npeso 5",
        "VotingClassifier\n(probabilidades médias)",
    ],
    rotation=40,
    ha="right",
)
plt.ylim([0, 1])
plt.title("Probabilidades de classe para a amostra 1 por diferentes classificadores")
plt.legend([p1[0], p2[0]], ["classe 1", "classe 2"], loc="upper left")
plt.tight_layout()
plt.show()

Resumo

Neste laboratório, aprendemos como plotar as probabilidades de classe calculadas pelo VotingClassifier no Scikit-Learn. Usamos três classificadores diferentes, incluindo LogisticRegression, GaussianNB e RandomForestClassifier, e calculamos a média das probabilidades previstas usando o VotingClassifier. Em seguida, visualizamos a ponderação das probabilidades ajustando cada classificador no conjunto de treino e plotando as probabilidades de classe previstas para a primeira amostra do conjunto de dados.