Probabilidades de clase con VotingClassifier

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos a trazar las probabilidades de clase calculadas por el VotingClassifier en Scikit-Learn. Utilizaremos tres clasificadores diferentes, incluyendo LogisticRegression, GaussianNB y RandomForestClassifier, y promediaremos sus probabilidades predichas utilizando el VotingClassifier. Luego visualizaremos la ponderación de probabilidades ajustando cada clasificador en el conjunto de entrenamiento y graficando las probabilidades de clase predichas para la primera muestra del conjunto de datos.

Consejos sobre la VM

Una vez que se haya completado la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargar. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y resolveremos rápidamente el problema para usted.


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{{"Probabilidades de clase con VotingClassifier"}} sklearn/naive_bayes -.-> lab-49329{{"Probabilidades de clase con VotingClassifier"}} sklearn/ensemble -.-> lab-49329{{"Probabilidades de clase con VotingClassifier"}} ml/sklearn -.-> lab-49329{{"Probabilidades de clase con VotingClassifier"}} end

Inicializar los clasificadores y el conjunto de datos

Primero inicializaremos tres clasificadores y un conjunto de datos de muestra. Utilizaremos LogisticRegression, GaussianNB y RandomForestClassifier como clasificadores, y X e y como el conjunto de datos de muestra.

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 el VotingClassifier

Luego inicializaremos un VotingClassifier de voto suave con pesos [1, 1, 5], lo que significa que las probabilidades predichas de RandomForestClassifier cuentan 5 veces más que los pesos de los otros clasificadores cuando se calcula la probabilidad promediada.

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

Predecir las probabilidades de clase para todos los clasificadores

Predeciremos las probabilidades de clase para todos los clasificadores utilizando la función predict_proba().

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

Obtener las probabilidades de clase para la primera muestra del conjunto de datos

Obtendremos las probabilidades de clase para la primera muestra del conjunto de datos y las almacenaremos en class1_1 y class2_1.

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

Graficar las probabilidades de clase

Graficaremos las probabilidades de clase para cada clasificador y el VotingClassifier utilizando un gráfico de barras.

N = 4  ## número de grupos
ind = np.arange(N)  ## posiciones de los grupos
width = 0.35  ## ancho de las barras

fig, ax = plt.subplots()

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

## anotaciones del 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 promedio)",
    ],
    rotation=40,
    ha="right",
)
plt.ylim([0, 1])
plt.title("Probabilidades de clase para la muestra 1 por diferentes clasificadores")
plt.legend([p1[0], p2[0]], ["clase 1", "clase 2"], loc="upper left")
plt.tight_layout()
plt.show()

Resumen

En este laboratorio, hemos aprendido cómo graficar las probabilidades de clase calculadas por el VotingClassifier en Scikit-Learn. Hemos utilizado tres clasificadores diferentes, incluyendo LogisticRegression, GaussianNB y RandomForestClassifier, y hemos promediado sus probabilidades predichas utilizando el VotingClassifier. Luego, hemos visualizado el peso de las probabilidades ajustando cada clasificador en el conjunto de entrenamiento y graficando las probabilidades de clase predichas para la primera muestra en el conjunto de datos.