Saltar al contenido
Introducción a Scikit-learn

Aprendizaje supervisado: Árboles de decisión y bosques aleatorios

Introducción

El aprendizaje supervisado es una técnica utilizada en machine learning para predecir la etiqueta de una nueva instancia, basándose en ejemplos de entrenamiento previo. En este proceso, se parte de un conjunto de datos etiquetados y se busca construir un modelo predictivo para etiquetas de nuevos datos.

Un popular algoritmo de aprendizaje supervisado es el de Árboles de Decisión, que consiste en un modelo de árbol construido a partir de decisiones binarias de “sí o no”, donde cada hoja representa una etiqueta. Los bosques aleatorios son un conjunto de árboles de decisión, donde cada árbol es entrenado con un subconjunto aleatorio de las características. El resultado final es la media de las predicciones.

Los árboles de decisión y los bosques aleatorios tienen aplicaciones muy amplias, desde el análisis de datos geoespaciales hasta la predicción de tasas de mortalidad en pacientes de hospital. Estos modelos son muy interpretables y fáciles de entender, lo que los hace muy populares en la comunidad científica y empresarial. Además, presentan un rendimiento de clasificación y regresión muy adecuado a tareas con datos de baja dimensión.

En el curso de Introducción a Scikit-learn, se explorarán en profundidad estas y otras técnicas de machine learning, para que el estudiante pueda aplicarlas a sus propios proyectos de análisis de datos.

Resumen

El aprendizaje supervisado es un tipo de aprendizaje automático donde se entrenan modelos a partir de datos etiquetados, es decir, se tiene un conjunto de datos previamente etiquetados con una determinada categoría y el modelo aprende a clasificar nuevas observaciones en base a dichas etiquetas.

Uno de los algoritmos más utilizados en aprendizaje supervisado son los árboles de decisión, los cuales son una estructura jerárquica de nodos que van clasificando los datos de entrada mediante sucesivas preguntas binarias en forma de árbol. Por ejemplo, si queremos clasificar una persona según su género, podríamos hacer preguntas como ¿tiene barba? ¿usa maquillaje? ¿tiene el cabello largo? y así sucesivamente hasta llegar a una conclusión. Los árboles de decisión tienen la ventaja de ser interpretables, es decir, podemos entender fácilmente cómo se ha llegado a una determinada clasificación, ya que cada nodo del árbol representa una pregunta que se ha realizado a los datos.

Sin embargo, los árboles de decisión pueden ser demasiado simples o demasiado complejos dependiendo del problema que se esté abordando. Es aquí donde entran en juego los bosques aleatorios, los cuales son una extensión de los árboles de decisión. Los bosques aleatorios construyen una gran cantidad de árboles de decisión en paralelo y posteriormente combinan los resultados de todos los árboles para mejorar la precisión de la clasificación. Además, para evitar problemas de sobreajuste, los bosques aleatorios incluyen cierta aleatoriedad en la construcción de cada árbol, como por ejemplo, elegir aleatoriamente un subconjunto de características para construir cada árbol.

La principal ventaja de los bosques aleatorios es que suelen tener una precisión mayor que los árboles de decisión, especialmente en problemas de clasificación complejos y/o con gran cantidad de características. Sin embargo, la interpretabilidad del modelo se pierde en cierta medida, ya que cada árbol construido es diferente y no tiene una estructura explícita como en el caso de los árboles de decisión.

Espero haber podido explicarlo de manera clara. Si tienes alguna pregunta adicional, por favor no dudes en preguntarme.

Aplicación teórica

Fundamentos Matemáticos de los Árboles de Decisión

Los árboles de decisión son modelos de aprendizaje automático que se utilizan para clasificar datos o realizar regresiones. Su objetivo es dividir el espacio de características en regiones homogéneas mediante una serie de decisiones binarias, que se representan gráficamente como un árbol. A continuación, se exploran los fundamentos matemáticos detrás de los árboles de decisión, incluyendo cómo se construyen, cómo se optimizan y cómo se evalúan.

1. Estructura de un Árbol de Decisión

Un árbol de decisión se compone de nodos y ramas:
- Nodos Internos: Representan pruebas sobre una característica (variable).
- Nodos Hoja: Representan una clase en la clasificación o un valor en la regresión.
- Ramas: Representan el resultado de una prueba en un nodo.

2. Construcción del Árbol de Decisión

La construcción de un árbol de decisión implica dividir el espacio de características en regiones cada vez más homogéneas. Cada división se basa en una característica y un umbral que optimiza una medida de pureza.

a. Medida de Impureza (para clasificación)

En los árboles de decisión para clasificación, la impureza mide cuán mezcladas están las clases en una partición del conjunto de datos. Las principales medidas de impureza son:

- Índice de Gini

El índice de Gini mide la impureza de un nodo. Se define como:

\[
Gini(t) = 1 - \sum_{i=1}^{C} p_i^2
\]

Donde:
- \(p_i\) es la proporción de instancias de la clase \(i\) en el nodo \(t\).
- \(C\) es el número de clases.

El índice de Gini varía entre 0 (nodo puro) y 0.5 (nodo completamente impuro).

- Entropía

La entropía mide la cantidad de información contenida en un nodo. Se define como:

\[
Entropy(t) = - \sum_{i=1}^{C} p_i \log_2(p_i)
\]

Donde:
- \(p_i\) es la proporción de instancias de la clase \(i\) en el nodo \(t\).

La entropía varía entre 0 (nodo puro) y \(\log_2(C)\) (nodo completamente impuro).

b. Medida de Pureza (para regresión)

Para problemas de regresión, se utilizan medidas de pureza como la varianza:

- Varianza

La varianza mide la dispersión de los valores en un nodo. Se define como:

\[
Var(t) = \frac{1}{N_t} \sum_{i=1}^{N_t} (y_i - \bar{y})^2
\]

Donde:
- \(y_i\) es el valor de la variable dependiente en el nodo \(t\).
- \(\bar{y}\) es la media de los valores \(y_i\) en el nodo \(t\).
- \(N_t\) es el número de instancias en el nodo \(t\).

3. Criterio de División

El criterio de división determina qué característica y umbral utilizar para dividir un nodo. El objetivo es elegir la división que minimice la impureza promedio ponderada de los nodos hijos.

Para una división en dos nodos hijos \(t_1\) y \(t_2\) a partir de un nodo \(t\), la ganancia de información se calcula como:

- Ganancia de Información

\[
Gain(t, A) = Imp(t) - \frac{N_{t_1}}{N_t} \cdot Imp(t_1) - \frac{N_{t_2}}{N_t} \cdot Imp(t_2)
\]

Donde:
- \(Imp(t)\) es la impureza del nodo \(t\).
- \(N_{t_1}\) y \(N_{t_2}\) son el número de instancias en los nodos hijos \(t_1\) y \(t_2\).
- \(N_t\) es el número de instancias en el nodo \(t\).

4. Poda del Árbol

La poda es un proceso para evitar el sobreajuste eliminando ramas que tienen poca importancia. Existen dos tipos principales de poda:

- Poda Pre-pruning (Poda Temprana): Detiene la expansión del árbol antes de que crezca demasiado, basándose en un umbral de impureza o número mínimo de instancias por nodo.

- Poda Post-pruning (Poda Posterior): Expande el árbol completamente y luego elimina ramas que no mejoran significativamente la generalización del modelo.

5. Algoritmos de Construcción de Árboles de Decisión

Los algoritmos de construcción de árboles de decisión más comunes son:

- ID3 (Iterative Dichotomiser 3): Utiliza la entropía y la ganancia de información para construir el árbol.

- C4.5: Una extensión de ID3 que utiliza la ganancia de información normalizada (ganancia de información dividida por la entropía) para manejar diferentes tamaños de clases.

- CART (Classification and Regression Trees): Utiliza el índice de Gini para clasificación y la varianza para regresión.

6. Evaluación del Árbol de Decisión

La evaluación del árbol de decisión se realiza utilizando métricas como la precisión, el recall, la F1-score para clasificación, y el error cuadrático medio (MSE) para regresión. Estas métricas ayudan a evaluar la capacidad del modelo para generalizar a datos no vistos y su rendimiento en comparación con otros modelos.

Conclusión

Los árboles de decisión son herramientas poderosas en el aprendizaje automático que ofrecen interpretabilidad y flexibilidad. Entender los fundamentos matemáticos detrás de su construcción, criterios de división y poda es esencial para diseñar y ajustar árboles de decisión efectivos.

Matemáticas de los Bosques Aleatorios (Random Forests)

Los Bosques Aleatorios (Random Forests) son un conjunto de modelos de aprendizaje automático basados en árboles de decisión, diseñados para mejorar la precisión y robustez de las predicciones. Utilizan un enfoque de ensamblaje para combinar múltiples árboles de decisión y reducir la varianza y el sobreajuste. A continuación, se detallan los fundamentos matemáticos detrás de los bosques aleatorios, desde la construcción hasta la evaluación del modelo.

1. Conceptos Básicos de los Bosques Aleatorios

Un Bosque Aleatorio es un ensamblaje de árboles de decisión que combina múltiples árboles para hacer una predicción final. La idea principal es utilizar la diversidad entre los árboles para mejorar el rendimiento general del modelo.

2. Construcción de un Bosque Aleatorio

a. Muestra Aleatoria de Datos

Para construir un bosque aleatorio, se generan múltiples árboles de decisión a partir de diferentes subconjuntos del conjunto de datos original. Este proceso se llama **bootstrap aggregating** (bagging). Cada árbol se entrena con una muestra aleatoria (con reemplazo) del conjunto de datos original.

Si el conjunto de datos original tiene \(n\) observaciones, cada árbol se entrena con una muestra de \(n\) observaciones seleccionadas al azar con reemplazo. Esto significa que algunas observaciones pueden aparecer varias veces en una muestra, mientras que otras pueden no aparecer en absoluto.

b. Subconjunto Aleatorio de Características

Además de muestrear aleatoriamente los datos, se selecciona aleatoriamente un subconjunto de características en cada nodo para determinar la mejor división. Este proceso reduce la correlación entre los árboles individuales y mejora la generalización del modelo.

Para cada nodo del árbol, se selecciona un subconjunto aleatorio de características y se elige la mejor característica dentro de ese subconjunto para dividir el nodo. Este procedimiento se conoce como subconjunto de características aleatorias.

3. Construcción de los Árboles

Cada árbol en el bosque se construye de manera similar a un árbol de decisión tradicional, utilizando una métrica de impureza para seleccionar las divisiones. Los árboles se construyen hasta la profundidad máxima o hasta que se cumplan ciertos criterios de detención, como el número mínimo de muestras en un nodo o la pureza del nodo.

a. Medidas de Impureza

Los árboles en el bosque aleatorio pueden utilizar las mismas medidas de impureza que los árboles de decisión tradicionales:

- Índice de Gini: 

\[
Gini(t) = 1 - \sum_{i=1}^{C} p_i^2
\]

Donde \(p_i\) es la proporción de instancias de la clase \(i\) en el nodo \(t\), y \(C\) es el número de clases.

- Entropía:

\[
Entropy(t) = - \sum_{i=1}^{C} p_i \log_2(p_i)
\]

Donde \(p_i\) es la proporción de instancias de la clase \(i\) en el nodo \(t\).

b. Selección de Características

En cada división de un nodo, se selecciona un subconjunto aleatorio de características y se utiliza la mejor característica dentro de ese subconjunto para realizar la división.

4. Predicción con Bosques Aleatorios

Una vez que todos los árboles han sido entrenados, la predicción se realiza agregando las predicciones de todos los árboles en el bosque:

- Para Clasificación: Se utiliza el voto mayoritario. La clase final es la que tiene la mayoría de votos de los árboles individuales.

\[
\hat{y}_{\text{RF}} = \text{mode}(\hat{y}_1, \hat{y}_2, \ldots, \hat{y}_T)
\]

Donde \(\hat{y}_i\) es la predicción del \(i\)-ésimo árbol y \(T\) es el número total de árboles en el bosque.

- Para Regresión: Se toma el promedio de las predicciones de todos los árboles.

\[
\hat{y}_{\text{RF}} = \frac{1}{T} \sum_{i=1}^{T} \hat{y}_i
\]

5. Importancia de Características

Los bosques aleatorios permiten evaluar la importancia de las características, que se puede calcular utilizando varias técnicas, como:

- Reducción de Impureza Promedio: La importancia de una característica se puede medir por la cantidad de reducción de impureza que causa a través del árbol.

- Permutación: Evaluar el impacto en el rendimiento del modelo al permutar aleatoriamente los valores de una característica y observar la disminución en la precisión.

6. Evaluación del Modelo

Para evaluar el rendimiento de un bosque aleatorio, se utilizan métricas como precisión, recall, F1-score para clasificación y error cuadrático medio (MSE) para regresión. Además, se puede utilizar validación cruzada para obtener una estimación robusta del rendimiento del modelo.

Conclusión

Los bosques aleatorios combinan la predicción de múltiples árboles de decisión para mejorar la precisión y la robustez del modelo. Al utilizar técnicas de muestreo aleatorio y selección de características, los bosques aleatorios reducen la varianza y el sobreajuste, logrando un rendimiento superior en comparación con los árboles individuales. La capacidad para evaluar la importancia de las características también proporciona información valiosa sobre la relevancia de las variables en el modelo.

 

Evaluación y Optimización de Modelos con Árboles de Decisión y Bosques Aleatorios

La evaluación y optimización de modelos con árboles de decisión y bosques aleatorios son pasos cruciales para asegurar que los modelos sean precisos, robustos y generalizables. Estos procesos implican la evaluación del rendimiento del modelo, la optimización de sus hiperparámetros y la mejora continua basada en métricas y validación.

1. Evaluación de Modelos

a. Evaluación de Árboles de Decisión

1. Métricas de Evaluación

   - Para Clasificación:
     - Precisión (\(\text{Accuracy}\)): La proporción de predicciones correctas sobre el total de predicciones.
       \[
       \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}
       \]
       Donde:
       - \(TP\) = Verdaderos positivos
       - \(TN\) = Verdaderos negativos
       - \(FP\) = Falsos positivos
       - \(FN\) = Falsos negativos

     - Recall (\(\text{Sensibilidad}\)): La proporción de verdaderos positivos identificados correctamente.
       \[
       \text{Recall} = \frac{TP}{TP + FN}
       \]

     - Precisión (\(\text{Precision}\)): La proporción de verdaderos positivos entre todos los positivos predichos.
       \[
       \text{Precision} = \frac{TP}{TP + FP}
       \]

     - F1-Score: La media armónica entre precisión y recall.
       \[
       \text{F1} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}
       \]

   - Para Regresión:
     - Error Cuadrático Medio (MSE): La media de los cuadrados de las diferencias entre los valores observados y los valores predichos.
       \[
       \text{MSE} = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2
       \]

     - Error Absoluto Medio (MAE): La media de las diferencias absolutas entre los valores observados y predichos.
       \[
       \text{MAE} = \frac{1}{N} \sum_{i=1}^{N} |y_i - \hat{y}_i|
       \]

     - R^2 (Coeficiente de Determinación): Mide la proporción de la varianza en la variable dependiente que es explicada por el modelo.
       \[
       R^2 = 1 - \frac{\sum_{i=1}^{N} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{N} (y_i - \bar{y})^2}
       \]

b. Evaluación de Bosques Aleatorios

1. Métricas de Evaluación

   Las métricas de evaluación para bosques aleatorios son las mismas que para árboles de decisión, ya que los bosques aleatorios se basan en una colección de árboles de decisión.

2. Validación Cruzada

   La validación cruzada es un método para evaluar la capacidad de generalización del modelo. Consiste en dividir el conjunto de datos en varios pliegues y entrenar el modelo en algunos de estos pliegues mientras se prueba en los pliegues restantes.

   - Validación Cruzada K-Fold: Divide el conjunto de datos en \(K\) pliegues. Se entrena el modelo \(K\) veces, cada vez usando un pliegue diferente como conjunto de prueba y los restantes como conjunto de entrenamiento.

2. Optimización de Modelos

a. Optimización de Árboles de Decisión

1. Profundidad del Árbol

   La profundidad del árbol afecta su complejidad y capacidad de generalización. Un árbol demasiado profundo puede sobreajustar los datos, mientras que un árbol muy superficial puede no capturar la complejidad de los datos. Se puede optimizar ajustando el parámetro `max_depth`.

2. Número Mínimo de Muestras por Nodo

   Establecer el número mínimo de muestras necesarias para dividir un nodo puede ayudar a controlar el tamaño del árbol. Ajustar el parámetro `min_samples_split` o `min_samples_leaf` permite regular la complejidad del modelo.

3. Criterio de División

   Se puede elegir entre el índice de Gini o la entropía para clasificación, o la varianza para regresión. Cambiar el criterio puede afectar el rendimiento del modelo.

b. Optimización de Bosques Aleatorios

1. Número de Árboles en el Bosque

   El número de árboles en el bosque aleatorio afecta la estabilidad y precisión del modelo. Un mayor número de árboles generalmente mejora la precisión, pero con rendimientos decrecientes. Se ajusta el parámetro `n_estimators`.

2. Número de Características por División

   Controlar el número de características consideradas para cada división en un árbol se realiza mediante el parámetro `max_features`. Un subconjunto más pequeño puede aumentar la diversidad entre los árboles y reducir la varianza.

3. Profundidad Máxima de los Árboles

   Similar a los árboles de decisión, se puede limitar la profundidad de cada árbol en el bosque aleatorio usando el parámetro `max_depth`.

4. Muestra de Características

   La proporción de características a considerar en cada división también puede ser ajustada con `max_features`. Un valor menor puede reducir la correlación entre árboles y mejorar el rendimiento general.

3. Técnicas Avanzadas de Optimización

1. Búsqueda de Hiperparámetros

   La búsqueda de hiperparámetros puede realizarse mediante técnicas como:

   - Búsqueda en Rejilla (Grid Search): Prueba exhaustivamente todas las combinaciones posibles de hiperparámetros.

   - Búsqueda Aleatoria (Random Search): Muestra combinaciones aleatorias de hiperparámetros, lo que puede ser más eficiente que la búsqueda en rejilla en espacios grandes.

   - Optimización Bayesiana: Utiliza modelos probabilísticos para encontrar la mejor combinación de hiperparámetros.

2. Validación Cruzada Estratificada

   Para problemas de clasificación con datos desbalanceados, la validación cruzada estratificada asegura que cada pliegue tenga la misma proporción de clases que el conjunto de datos original, proporcionando una evaluación más representativa del modelo.

Conclusión

La evaluación y optimización de modelos con árboles de decisión y bosques aleatorios implican medir el rendimiento del modelo mediante diversas métricas y ajustar los hiperparámetros para mejorar la precisión y robustez. La validación cruzada y técnicas avanzadas de optimización ayudan a asegurar que el modelo generalice bien a datos no vistos y maximice su rendimiento en tareas de clasificación o regresión.

 

Aplicación práctica

Un ejemplo práctico de cómo utilizar Scikit-learn para implementar el algoritmo de aprendizaje supervisado de Árboles de decisión y bosques aleatorios. Utilizaremos un conjunto de datos de flores iris (iris dataset) para entrenar y probar nuestros modelos. El objetivo es clasificar las flores en tres categorías diferentes de acuerdo con su longitud y anchura de sépalos y pétalos.

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target

A continuación, dividimos los datos en conjuntos de entrenamiento y prueba:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

Luego, importamos los algoritmos de Árboles de decisión y Bosques aleatorios de Scikit-learn:

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier

Creamos un objeto para cada uno de los clasificadores y ajustamos los datos de entrenamiento a cada modelo:

clf_dt = DecisionTreeClassifier(max_depth=3)
clf_dt.fit(X_train,y_train)
clf_rf = RandomForestClassifier(max_depth=3)
clf_rf.fit(X_train,y_train)

Finalmente, utilizamos los datos de prueba para hacer una predicción con cada modelo:

y_pred_dt = clf_dt.predict(X_test)
y_pred_rf = clf_rf.predict(X_test)

Y evaluamos la precisión de cada modelo utilizando la métrica de precisión (Accuracy):

from sklearn.metrics import accuracy_score
print("Precisión del modelo de Árboles de decisión:", accuracy_score(y_test, y_pred_dt))
print("Precisión del modelo de Bosques aleatorios:", accuracy_score(y_test, y_pred_rf))

¡Listo! Ahora tienes un ejemplo práctico de cómo implementar el algoritmo de aprendizaje supervisado de Árboles de decisión y Bosques aleatorios utilizando Scikit-learn.