Construir el conjunto de test de un boosted tree

| Última modificación: 1 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este artículo vamos a construir el conjunto de test de un boosted tree.

En otro post hemos visto un ejemplo de boosted trees con clasificación. Realizamos unos histogramas que determinaban que el problema planteado no era muy separable, ya el grupo binario de histogramas estaban muy superpuestos.

Antes de empezar a construir el conjunto de test de un boosted tree

Recordemos que los boosted trees son procesos de iteración que se basan en una combinación lineal de diferentes algoritmos sencillos de regresión o clasificación. Son aplicables a cualquier tipo de algoritmo en machine leraning; no obstante, se usan más frecuentemente con algoritmos basados en árboles.

Lo que haremos aquí será construir el conjunto de test de este ejercicio, para el cual se usó el Pima Indians Diabetes Database. Este dataset, alojado en Kaggle, es originario del Instituto Nacional de Diabetes y enfermedades digestivas y renales. Su objetivo es predecir a través de los diagnósticos si un paciente tiene diabetes basándonos en ciertas medidas incluidas en el dataset.

Los datos provienen de un conjunto de datos más grande y se ha seleccionado un subconjunto concreto; todos los pacientes son mujeres de por lo menos 21 años y con descendencia de origen indio.

Construir el conjunto de test de un boosted tree

Dentro de la página podemos ver información de los datos, pero no lo haremos porque eso sería, técnicamente “hacer trampa”, si lo que buscamos es aprender cómo realizar el ejercicio desde cero.

Construir el conjunto de test de un boosted tree: ejercicio

#Construir el conjunto de test de un boosted tree
from sklearn.model_selection import train_test_split

#preparamos los datos
features = data.columns.drop (['Outcome'])
X = data [features].values
y = data ['Outcome].values
X_train, X_test, y_train, y_test = train_test_split (x, y, test_size = 0.2, random_state = 0)

print ('Datos train: ' X_train.shape)
print('Datos test: ' X_test.shape)

Datos train: (614, 8)

Datos test: (154, 8)

Estratificación

¿Crees que hemos hecho las cosas bien? Si crees que no, estás en lo correcto. Lo que pasa es que no hemos estratificado y eso está muy mal, porque ya hemos visto que el dataset está desbalanceado (recordemos que el value.counts de Outcome dio como resultado 0,500/1,268).

En general hay una buena práctica, pero si ya sabemos que las clases no tienen un porcentaje de 50/50, con más razón tenemos que acordarnos de estratificar; de lo contrario, vamos a perder prestaciones sin motivo alguno.

Por ello, vamos a estratificar de una vez en nuestro proceso de construir el conjunto de test de un boosted tree:

#Construir el conjunto de test de un boosted tree
print (f ' Distribución de clases en total: (np.unique (y, return_counts = True) [1] [0] / len (y)}')
X_train, X_test, y_train, y_test = train_test_split (x, y, test_size = 0.2, random_state = 0, shuffle = True)
print (f ' Distribución de clases en test SIN estratificación: {np. unique (y_test, return_counts = True) [1] [0] / len (y_test)}')
X_train, X test, y_train, y_test = train_test_split (x, y, test size = 0.2, random_state = 0, shuffle = True, stratify = y)
print (f ' Distribución de clases en test CON estratificación: (np.unique (y_test, return_counts = True) [1] [0] / len (y_test)})

#Construir el conjunto de test de un boosted tree
print ('Datos train: ', X_train.shape)
print ('Datos de test: , X_test.shape)

Distribución de clases en total: 0.6510416666666666

Distribución de clases en test SIN estratificación: 0.6948051948051948

Distribución de clases en test CON estratificación: 0.6493506493506493

Datos train: (614,8)

Datos de test: (154,8)

La distribución de clases es solo una forma de hablar, porque realmente lo que estoy sacando aquí es una proporción de una de las dos clases que hay, ya sea de ceros o de unos. No se sabe cuál es cuál, lo único que se sabe es que una de esas clases es de 65% (equivalente a la distribución de clases en total) y otra es del 35% restante.

Entonces, el objetivo es un 65%. Si no estratificamos, tenemos un 69.48%, muy cercano, pero ya vemos que estratificando podemos llegar a un número que es mucho más cercano a la realidad, es decir, el 64.9 de la distribución de clases en test CON estratificación.

Estratificar es muy fácil y debemos hacerlo. No hay necesidad de perder un 0.5 por una acción tan pequeña como no poner stratify = y.

Ahora que hemos visto cómo construir el conjunto de test de un boosted tree, podemos dar el siguiente paso en nuestro proceso de aprendizaje. Para ello tenemos el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que tendrás la oportunidad de instruirte sobre todas las temáticas relacionadas con una de las disciplinas más demandadas y con mejor mercado laboral en la actualidad. ¡No esperes para cambiar tu futuro y solicita más información!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado