Introducción

En este tema, exploraremos dos técnicas populares de modelado de datos: los árboles de decisión y los bosques aleatorios. Estas técnicas son ampliamente utilizadas debido a su capacidad para manejar tanto problemas de clasificación como de regresión, y su facilidad de interpretación.

Árboles de Decisión

Conceptos Básicos

Un árbol de decisión es una estructura de árbol donde cada nodo interno representa una "prueba" en un atributo (por ejemplo, si una variable es mayor o menor que un valor dado), cada rama representa el resultado de la prueba, y cada nodo hoja representa una etiqueta de clase (en clasificación) o un valor continuo (en regresión).

Ventajas y Desventajas

Ventajas:

  • Fácil de entender e interpretar.
  • Requiere poca preparación de datos.
  • Puede manejar tanto datos numéricos como categóricos.

Desventajas:

  • Propenso al sobreajuste.
  • Sensible a pequeñas variaciones en los datos.

Ejemplo Práctico

Vamos a construir un árbol de decisión utilizando la biblioteca scikit-learn en Python.

Paso 1: Importar las Bibliotecas Necesarias

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

Paso 2: Cargar y Preparar los Datos

# Cargar el conjunto de datos Iris
iris = load_iris()
X = iris.data
y = iris.target

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

Paso 3: Entrenar el Modelo

# Crear el modelo de árbol de decisión
clf = DecisionTreeClassifier()

# Entrenar el modelo
clf.fit(X_train, y_train)

Paso 4: Evaluar el Modelo

# Hacer predicciones
y_pred = clf.predict(X_test)

# Calcular la precisión
accuracy = accuracy_score(y_test, y_pred)
print(f'Precisión del modelo: {accuracy:.2f}')

Ejercicio Práctico

Ejercicio: Construye un árbol de decisión para el conjunto de datos Titanic disponible en seaborn.

Solución:

import seaborn as sns
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Cargar el conjunto de datos Titanic
titanic = sns.load_dataset('titanic')

# Preprocesar los datos
titanic = titanic.dropna(subset=['age', 'embarked', 'fare'])
titanic['sex'] = titanic['sex'].map({'male': 0, 'female': 1})
titanic['embarked'] = titanic['embarked'].map({'C': 0, 'Q': 1, 'S': 2})

# Seleccionar características y etiqueta
X = titanic[['pclass', 'sex', 'age', 'fare', 'embarked']]
y = titanic['survived']

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Crear y entrenar el modelo
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)

# Hacer predicciones y evaluar el modelo
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Precisión del modelo: {accuracy:.2f}')

Bosques Aleatorios

Conceptos Básicos

Un bosque aleatorio es un conjunto de árboles de decisión entrenados con diferentes subconjuntos del conjunto de datos. La predicción final se obtiene promediando las predicciones de todos los árboles (en regresión) o por votación mayoritaria (en clasificación).

Ventajas y Desventajas

Ventajas:

  • Reduce el riesgo de sobreajuste.
  • Maneja bien grandes conjuntos de datos.
  • Proporciona una estimación de la importancia de las características.

Desventajas:

  • Menos interpretable que un solo árbol de decisión.
  • Requiere más recursos computacionales.

Ejemplo Práctico

Vamos a construir un bosque aleatorio utilizando scikit-learn.

Paso 1: Importar las Bibliotecas Necesarias

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

Paso 2: Cargar y Preparar los Datos

# Cargar el conjunto de datos Iris
iris = load_iris()
X = iris.data
y = iris.target

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

Paso 3: Entrenar el Modelo

# Crear el modelo de bosque aleatorio
clf = RandomForestClassifier(n_estimators=100, random_state=42)

# Entrenar el modelo
clf.fit(X_train, y_train)

Paso 4: Evaluar el Modelo

# Hacer predicciones
y_pred = clf.predict(X_test)

# Calcular la precisión
accuracy = accuracy_score(y_test, y_pred)
print(f'Precisión del modelo: {accuracy:.2f}')

Ejercicio Práctico

Ejercicio: Construye un bosque aleatorio para el conjunto de datos Titanic disponible en seaborn.

Solución:

import seaborn as sns
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Cargar el conjunto de datos Titanic
titanic = sns.load_dataset('titanic')

# Preprocesar los datos
titanic = titanic.dropna(subset=['age', 'embarked', 'fare'])
titanic['sex'] = titanic['sex'].map({'male': 0, 'female': 1})
titanic['embarked'] = titanic['embarked'].map({'C': 0, 'Q': 1, 'S': 2})

# Seleccionar características y etiqueta
X = titanic[['pclass', 'sex', 'age', 'fare', 'embarked']]
y = titanic['survived']

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Crear y entrenar el modelo
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)

# Hacer predicciones y evaluar el modelo
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Precisión del modelo: {accuracy:.2f}')

Conclusión

En esta sección, hemos aprendido sobre los árboles de decisión y los bosques aleatorios, dos técnicas poderosas para el modelado de datos. Hemos visto cómo construir y evaluar estos modelos utilizando scikit-learn en Python. En el próximo módulo, exploraremos cómo evaluar y validar estos modelos para asegurarnos de que sean robustos y generalizables.

© Copyright 2024. Todos los derechos reservados