Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/HelenDiMo/pildora-bootcamp-preprocesamiento/llms.txt

Use this file to discover all available pages before exploring further.

Random Forest es un ensemble de árboles de decisión en el que cada árbol se entrena sobre una muestra bootstrap del conjunto de datos y utiliza un subconjunto aleatorio de características en cada nodo de división. Las predicciones finales se obtienen por votación mayoritaria entre todos los árboles, lo que reduce la varianza y mejora la generalización respecto a un único árbol. En este módulo, Random Forest actúa como el primer clasificador de referencia sobre el dataset Palmer Penguins, encapsulado dentro de un Pipeline de scikit-learn que integra preprocesamiento y modelo en un único objeto ajustable.

Función train_random_forest

La función train_random_forest construye y ajusta un Pipeline que combina el preprocesador de columnas con un RandomForestClassifier de 200 árboles:
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier

def train_random_forest(preprocessor, X_train, y_train):
    rf = Pipeline([
        ('preprocessor', preprocessor),
        ('model', RandomForestClassifier(n_estimators=200, random_state=42))
    ])
    rf.fit(X_train, y_train)
    return rf
Parámetros:
ParámetroTipoDescripción
preprocessorColumnTransformerObjeto construido por build_preprocessor(). Gestiona imputación y codificación de columnas numéricas y categóricas.
X_trainpd.DataFrameConjunto de entrenamiento con las columnas ['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm', 'body_mass_g', 'bill_ratio', 'island', 'sex'].
y_trainpd.SeriesVariable objetivo con las etiquetas de especie: 'Adelie', 'Chinstrap' o 'Gentoo'.
Retorna: un sklearn.pipeline.Pipeline ajustado con dos pasos: 'preprocessor' y 'model'. Hiperparámetros usados en el entrenamiento:
  • n_estimators=200: se construyen 200 árboles de decisión independientes.
  • random_state=42: semilla fija para garantizar reproducibilidad de los resultados.
El paso 'preprocessor' del pipeline se ajusta automáticamente cuando se llama a pipeline.fit(X_train, y_train). Nunca llames a preprocessor.fit() por separado antes de insertar el objeto en el pipeline — hacerlo causaría una doble transformación o fugas de información entre conjuntos.

Uso y evaluación

Una vez construido el pipeline, puedes generar predicciones y evaluar el modelo con accuracy, reporte de clasificación y matriz de confusión:
from sklearn.metrics import accuracy_score, classification_report, ConfusionMatrixDisplay
import matplotlib.pyplot as plt

rf_pipeline = train_random_forest(preprocessor, X_train, y_train)
rf_preds = rf_pipeline.predict(X_test)

print("Accuracy:", accuracy_score(y_test, rf_preds))
print(classification_report(y_test, rf_preds))

fig, ax = plt.subplots()
ConfusionMatrixDisplay.from_predictions(y_test, rf_preds, ax=ax, cmap="viridis")
plt.show()
La matriz de confusión con cmap="viridis" muestra de forma visual cuántas observaciones de cada especie se clasificaron correctamente y en qué clase se equivocó el modelo. Una diagonal perfectamente llena indica 0 errores.

Hiperparámetros clave

ParámetroValor usadoDescripción
n_estimators200Número de árboles en el ensemble. Más árboles reducen la varianza, pero incrementan el tiempo de entrenamiento.
random_state42Semilla del generador de números aleatorios. Garantiza que el mismo código produzca los mismos resultados.
max_features'sqrt' (por defecto)Número de características evaluadas en cada división. Con 'sqrt', cada nodo evalúa √n características, decorrelacionando los árboles.
max_depthNone (por defecto)Profundidad máxima de cada árbol. None permite que los árboles crezcan hasta hojas puras, lo que puede causar sobreajuste en datasets grandes.

Interpretación

En el dataset Palmer Penguins, Random Forest frecuentemente alcanza una accuracy cercana o igual al 100 %. Esto se debe al pequeño tamaño del dataset (344 observaciones) y a las fronteras de clase bien separadas entre las tres especies. Para confirmar que el resultado es robusto y no un artefacto del split particular, utiliza validación cruzada:
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier

scores = cross_val_score(rf_pipeline, X, y, cv=5)
print("CV accuracy:", scores.mean().round(4))
cross_val_score divide automáticamente los datos en 5 particiones, ajusta el pipeline completo (incluyendo el preprocesador) en cada una y evalúa en el fold de validación restante. La media de los 5 scores es una estimación mucho más fiable que la accuracy sobre un único conjunto de test.
Una accuracy de 1.0 no significa necesariamente que el modelo sea perfecto — puede reflejar el pequeño tamaño del dataset y las fronteras de clase bien definidas del conjunto Palmer Penguins. Valida siempre con validación cruzada antes de sacar conclusiones sobre la capacidad de generalización del modelo.

Build docs developers (and LLMs) love