Ejemplo de boosted trees con clasificación

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

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este post veremos un ejemplo de boosted trees con clasificación. Los boosted trees son, como su nombre indica, árboles modificados de tal manera que permiten hacer las cosas que los árboles individuales no, al tiempo que mejoran los problemas que estos árboles por sí solos no pueden solucionar. De ahí su gran relevancia en el campo del machine learning y la razón por la cual realizaremos un ejemplo de estos boosted trees con clasificación. Para ello, utilizaremos el Pima Indians Diabetes Database.

Boosted trees con clasificación: ejercicio

Lo primero que haremos será cargar las librerías y funciones necesarias:

#Boosted trees con clasificación
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
%matplotlib inline

cm = plt.cm.RdBu
cm_bright = ListedColormap (['#FF0000", "#0000FF"])

import warnings
warnings.filterwarnings ('ignore')

Acto seguido, cargaremos los datos:

#Boosted trees con clasificación
data = pd.read_csv ('./data/diabetes.csv')
data.head ()
boosted trees con clasificación
#Boosted trees con clasificación
data ['Outcome'].value.counts ()

0 500

1 268

Name: Outcome, dtype: int64

El value counts nos dice que se tienen datos binarios y que, aunque no está balanceado el resultado, tampoco es una locura. Si bien sí está desbalanceado y habrá que tener cuidado, no lo está de una manera exorbitante.

Ahora lo que haremos será representar el histograma de cada variable separado por clases. ¿Hay alguna característica que convenga transformar?

Antes de meternos con los histogramas, vamos a hacer un análisis exploratorio un poco más en profundidad. Haremos un describe para determinar cuántas variables o instancias tenemos. En este caso, el resultado nos arroja que son 768 (count = 768):

#Boosted trees con clasificación
data.describe ()

Ahora, realizaremos un data.types para verificar que todas son numéricas, porque aparentemente lo son, pero con este simple comando podremos comprobarlo de manera certera:

data.dtypes

Pregnancies int64

Glucose int64

BloodPressure int64

SkinThickness int64

Insulin int64

BMI float64

DiabetesPedigreeFunction float64

Age int64

Outcome int64

dtype: object

Efectivamente, todas son numéricas.

Tras esta verificación, realizaremos otra para mirar si hay algún missing o valor faltante.

data.isnull ().any ()

Pregnancies False

Glucose False

BloodPressure False

SkinThickness False

Insulin False

BMI False

DiabetesPedigreeFunction False

Age False

Outcome False

dtype: bool

Corroboramos que, en efecto, no existe ningún valor nulo dentro del conjunto de datos que hemos cargado.

#Boosted trees con clasificación
#Pintamos histogramas para cada clase
plt.figure (figsize = (20, 10))

idx = data ['Outcome'] == 0
idx 1 = data['Outcome'] == 1

for i, feature in enumerate (data.columns.drop (['Outcome'])):
plt.subplot (2, 4, i + 1)
plt.hist (data.loc [idx_0, feature], density = 0, alpha = 0.75, label = 'y = 0')
plt.hist (data.loc [idx_1, feature], density = 0, facecolor = "red", alpha = 0.75, label ='y =1')
plt.legend ()
plt.title (feature)
plt.show ()

Ahora evaluaremos el dataset para ver si existe algún tipo de correlación entre variables:

#Boosted trees con clasificación
import seaborn as sns

#Compute the correlation matrix
corr = np.abs (data.drop (['Outcome], axis = 1).corr ())

# Generate a mask for the upper triangle
mask= np. zeros_like (corr, dtype = np.bool)
mask [np.triu_indices_from (mask)] = True

#Set up the matplotlib figure
f, ax = plt.subplots (figsize = (12, 10))

#Draw the heatmap with the mask and correct aspect ratio
sns.heatmap (corr, mask = mask, vmin = 0.0, vmax = 1.0, center = 0.5, linewidths = 1, cmap = "YlGnBu", cbar_kws = {"shrink": .8})

plt.show ()

Según este diagrama, apenas existe correlación. La única correlación que existe es entre Age y Pregnancies; esto es entendible, ya que, a mayor edad, mayor número de embarazos.

La correlación más alta, pues, se da entre Age y Pregnancies, ya el resto son correlaciones bastante más bajas.

Teniendo en cuenta este resultado, nosotros no haríamos nada con él, ya que si no existe mucha correlación entre ninguna variable en específico, no existirán problemas de otra índole en algún aspecto.

A la vista de los histogramas anteriores, ¿cómo de separable crees que es el problema? El concepto general es que no parece que sean muy separables. Ambos grupos de histogramas, tanto el 0 como el 1, están muy juntos, superpuestos, con lo cual no va a ser muy separable el problema que se plantea.

Los boosted trees son árboles muy útiles para tratar principalmente problemas de mayor complejidad que los árboles habituales. Si quieres seguir aprendiendo sobre una de las disciplinas más demandadas en la actualidad, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que podrás adquirir todas las herramientas teóricas y prácticas para incursionar en un mundo que está lleno de oportunidades estupendas para ti. ¡Anímate a impulsar tu vida y solicita más información ahora!

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