Sun. Dec 4th, 2022

Los modelos de conjuntos de clasificación son aquellos compuestos por muchos modelos ajustados a los mismos datos, donde el resultado de la clasificación puede ser el voto de la mayoría, un promedio de los resultados o el resultado del modelo con mejor desempeño.Figura 1: Modelo de conjunto con resultado de votación. Imagen del autor. En la Figura 1, hay un ejemplo del clasificador de votaciones que vamos a construir en este tutorial rápido. Observe que hay tres modelos ajustados a los datos. Dos de ellos clasificaron los datos como 1, mientras que uno clasificó como 0. Entonces, por voto mayoritario, la clase 1 gana, y ese es el resultado. En Scikit-Learn, un ejemplo de modelo de conjunto comúnmente utilizado es el clasificador Random Forest. Por cierto, este es un modelo muy poderoso que usa una combinación de muchos árboles de decisión para darnos el mejor resultado para una observación. Otra opción es el modelo Gradient Boosting, que también es un tipo de modelo de conjunto, pero tiene una configuración diferente para llegar al resultado.

Si está interesado, hay este artículo muy completo de TDS aquí sobre los modelos de conjuntos de embolsado frente a potenciadores.

Sin embargo, esos son modelos preempaquetados creados para facilitar nuestra vida como científicos de datos. Se desempeñan extremadamente bien y entregarán buenos resultados, pero usan solo un algoritmo para entrenar los modelos. ¿Qué pasaría si quisiéramos crear nuestro propio clasificador de votación, con diferentes algoritmos? Eso es lo que estamos a punto de aprender.

Un Voting Classifier entrena diferentes modelos utilizando los algoritmos elegidos, devolviendo el voto de la mayoría como resultado de la clasificación.

En Scikit-Learn, hay una clase llamada VotingClassifier() para ayudarnos a crear clasificadores de votación con diferentes algoritmos de una manera fácil. Primero, importe los módulos necesarios.# Conjunto de datos
desde sklearn.datasets import make_classification# sklearn
de sklearn.model_selection import train_test_split
de sklearn.tree importar DecisionTreeClassifier
de sklearn.linear_model import LogisticRegression
de sklearn.ensemble importar GradientBoostingClassifier, VotingClassifier
from sklearn.metrics import f1_score, precision_score Vamos a crear un conjunto de datos para nuestro ejercicio.seed=56456462
# conjunto de datos
df = make_classification(n_samples=300, n_features=5, n_informative=4, n_redundant=1, random_state=seed)# Dividir
X,y = gl[0]d.f.[1]# Prueba de tren
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3, random_state=seed) Ok, todo listo. A continuación, debemos decidir qué algoritmos queremos usar. Usaremos una combinación de Regresión logística, Árbol de decisión y el modelo de conjunto Aumento de gradiente. Entonces, podemos notar que un clasificador de votación puede estar compuesto por otros modelos de conjuntos dentro de él, lo cual es bueno. ¿Imagínese reuniendo el poder de un bosque aleatorio con el aumento de gradiente? # Creando instancias de los algoritmos
logit_model = LogisticRegression()
dt_model = DecisionTreeClassifier()
gb_model = GradientBoostingClassifier() Ahora, tenemos todo para componer nuestro clasificador de votaciones.# Voting Classifier
votando = VotingClassifier (estimadores =[
(‘lr’, logit_model),
(‘dt’, dt_model),
(‘gb’, gb_model) ],
vote=’hard’)voting=’hard’ es el valor predeterminado, y significa predecir las etiquetas de clase con la regla de la mayoría votando. A continuación, vamos a crear una lista de estos modelos, para que podamos repetirlos y comparar los resultados por separado.# lista de clasificadores
lista_de_clasificadores = [logit_model, dt_model, gb_model, voting]# Puntuaciones de bucle
para clasificador en list_of_classifiers:
clasificador.fit(tren_X,tren_y)
pred = clasificador.predecir(X_test)
imprimir (“Puntuación F1:”)
print(clasificador.__clase__.__nombre__, f1_score(y_test, pred))
imprimir(“Precisión:”)
print(clasificador.__clase__.__nombre__, precision_score(y_test, pred))
print(“———-“) Y el resultado es: Puntuación F1: LogisticRegression 0.8260869565217391
Precisión: LogisticRegression 0.8222222222222222
———-
Puntuación F1: DecisionTreeClassifier 0.8172043010752689
Precisión: DecisionTreeClassifier 0.8111111111111111
———-
Puntuación F1: GradientBoostingClassifier 0.8421052631578948
Precisión: GradientBoostingClassifier 0.83333333333333334
———-
Puntuación F1: VotingClassifier 0.851063829787234
Precisión: VotingClassifier 0.8444444444444444
———-Figura 2: Clasificador de votaciones que supera a los modelos independientes. Imagen del autor. En este ejemplo, el Clasificador de votaciones superó a las otras opciones. Tanto el puntaje F1 (una combinación de precisión de clase positiva y tasa de verdaderos positivos) como los puntajes de precisión fueron ligeramente más altos que Gradient Boosting solo y mucho mejores que Decision Tree solo. Vale la pena registrar que, si cambia los valores iniciales , el conjunto de datos de entrada cambiará, por lo que es posible que obtenga resultados diferentes. Por ejemplo, intente usar seed=8 y obtendrá este resultado, donde el clasificador de votación es superado por la regresión logística y el aumento de gradiente.Figura 3: El clasificador de votaciones funciona peor que Logit y Grad. Impulsando modelos. Imagen del autor. Te digo esto porque es importante mostrar que la ciencia de datos no es una ciencia exacta. Se basa en ciencias exactas, pero no son solo las recetas para el éxito las que lo llevarán allí. La mayoría de las veces, tendrá que modificar y ajustar sus modelos mucho más que esto para llegar al resultado final. Pero tener herramientas como la que se presenta en este artículo puede ayudarlo mucho. Los modelos de conjunto son buenas opciones y con frecuencia brindan excelentes resultados. Tienen menos posibilidades de sobreajustar los datos, dado que entrenan muchos modelos con diferentes cortes de los datos. mayor precisión, ya que hay más modelos que confirman que la clasificación está en la dirección correcta. VotingClassifier() puede ayudarlo a crear un modelo de conjunto con diferentes algoritmos. Sintaxis: use una tupla con VotingClassifier (“nombre del modelo”, Instancia() ) Si te gusta este contenido, sigue mi blog. Encuéntrame también en LinkedIn. Aurélien Géron, 2019. Aprendizaje automático práctico con Scikit-Learn, Keras y TensorFlow. 2ed, O’Reilly.