Implementando el algoritmo AdaBoost desde cero

Los modelos AdaBoost pertenecen a una clase de modelos de aprendizaje automático de conjunto. Del significado literal de la palabra ‘conjunto’, fácilmente podemos tener una mejor intuición de cómo funciona este modelo. Los modelos de conjunto asumen la responsabilidad de combinar diferentes modelos y luego producen un metamodelo avanzado/más preciso. Este metamodelo tiene una precisión comparativamente alta en términos de predicción en comparación con sus contrapartes correspondientes. Hemos leído sobre el funcionamiento de estos modelos de conjuntos en el artículo Clasificador de conjuntos | Minería de datos .

El algoritmo AdaBoost se incluye en las técnicas de refuerzo de conjunto, como se mencionó, combina múltiples modelos para producir resultados más precisos y esto se hace en dos fases:

  1. Múltiples alumnos débiles pueden aprender sobre datos de entrenamiento
  2. Combinando estos modelos para generar un metamodelo, este metamodelo tiene como objetivo resolver los errores realizados por los alumnos débiles individuales.

Nota: Para obtener más información, consulte Impulsar modelos de conjunto

En este artículo, vamos a aprender sobre la implementación práctica del clasificador AdaBoost sobre un conjunto de datos.

En este problema, se nos proporciona un conjunto de datos que contiene 3 especies de flores y características de estas flores, como la longitud del sépalo, el ancho del sépalo, la longitud del pétalo y el ancho del pétalo, y tenemos que clasificar las flores en estas especies. El conjunto de datos se puede descargar desde aquí.

Comencemos con la importación de bibliotecas importantes que necesitaremos para realizar nuestra tarea de clasificación:

Python

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
import warnings
warnings.filterwarnings("ignore")

 Después de importar las bibliotecas, cargaremos nuestro conjunto de datos usando el método pandas read_csv como:

Python

# Reading the dataset from the csv file
# separator is a vertical line, as seen in the dataset
data = pd.read_csv("Iris.csv")
  
# Printing the shape of the dataset
print(data.shape)
(150, 6)

Podemos ver que nuestro conjunto de datos contiene 150 filas y 6 columnas. Echemos un vistazo a nuestro contenido real en el conjunto de datos usando el método head() como:

Python

data.head()
  Identificación SépaloLongitudCm SépaloAnchoCm PétaloLongitudCm PétaloAnchoCm  Especies
0 1 5.1 3.5 1.4 0.2 Iris-setosa
1 2 4.9 3.0 1.4 0.2 Iris-setosa
2 3 4.7 3.2 1.3 0.2 Iris-setosa
3 4 4.6 3.1 1.5 0.2 Iris-setosa
4 5 5.0 3.6 1.4 0.2 Iris-setosa

La primera columna es la columna Id, que no tiene relevancia con las flores, por lo que la descartaremos. La columna Especie es nuestra función de destino y nos informa sobre la especie a la que pertenecen las flores.

Python

data = data.drop('Id',axis=1)
X = data.iloc[:,:-1]
y = data.iloc[:,-1]
print("Shape of X is %s and shape of y is %s"%(X.shape,y.shape))
Shape of X is (150, 4) and shape of y is (150,)

Python

total_classes = y.nunique()
print("Number of unique species in dataset are: ",total_classes)
Number of unique species in dataset are: 3

Python

distribution = y.value_counts()
print(distribution)
Iris-virginica     50
Iris-setosa        50
Iris-versicolor    50
Name: Species, dtype: int64

Profundicemos en nuestro conjunto de datos, y podemos ver en la imagen de arriba que nuestro conjunto de datos contiene 3 clases en las que también se distribuyen nuestras flores, dado que tenemos 150 muestras, las tres especies tienen la misma cantidad de muestras en el conjunto de datos, por lo que tenemos sin desequilibrio de clases.

Ahora, dividiremos el conjunto de datos con fines de capacitación y validación, el conjunto de validación es el 25% del conjunto de datos total.

Python

X_train,X_val,Y_train,Y_val = train_test_split(X,y,test_size=0.25,random_state=28)

Después de crear el conjunto de entrenamiento y validación, construiremos nuestro modelo de clasificador AdaBoost y lo ajustaremos sobre el conjunto de entrenamiento para el aprendizaje.

Python

# Creating adaboost classifier model
adb = AdaBoostClassifier()
adb_model = adb.fit(X_train,Y_train)

A medida que ajustamos nuestro modelo en el conjunto de trenes, verificaremos la precisión de nuestro modelo en el conjunto de validación.

Python

print("The accuracy of the model on validation set is", adb_model.score(X_val,Y_val))
The accuracy of the model on validation set is 0.9210526315789473

Como podemos ver, el modelo tiene una precisión del 92 % en el conjunto de validación, lo cual es bastante bueno sin ajuste de hiperparámetros ni ingeniería de funciones.

Publicación traducida automáticamente

Artículo escrito por saurabh48782 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *