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.