Estimación de error OOB en bosque aleatorio

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, demostraremos cómo medir la tasa de error fuera de la bolsa (OOB, por sus siglas en inglés) para un modelo de bosque aleatorio utilizando la biblioteca scikit-learn de Python. La tasa de error OOB es el error promedio para cada observación de entrenamiento calculado utilizando las predicciones de los árboles que no contienen la observación en su respectiva muestra bootstrap. Esto permite ajustar y validar el modelo de bosque aleatorio mientras se está entrenando.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargar. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-49119{{"Estimación de error OOB en bosque aleatorio"}} sklearn/datasets -.-> lab-49119{{"Estimación de error OOB en bosque aleatorio"}} ml/sklearn -.-> lab-49119{{"Estimación de error OOB en bosque aleatorio"}} end

Importar las bibliotecas necesarias

Comenzaremos importando las bibliotecas necesarias, incluyendo scikit-learn, NumPy y Matplotlib. También estableceremos un valor de estado aleatorio para garantizar la reproducibilidad.

import matplotlib.pyplot as plt
from collections import OrderedDict
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier

RANDOM_STATE = 123

Generar un conjunto de datos de clasificación binaria

A continuación, generaremos un conjunto de datos de clasificación binaria utilizando la función make_classification proporcionada por scikit-learn. Esta función nos permite especificar el número de muestras, características, clusters por clase y características informativas. Utilizaremos un valor fijo de estado aleatorio para garantizar la reproducibilidad.

X, y = make_classification(
    n_samples=500,
    n_features=25,
    n_clusters_per_class=1,
    n_informative=15,
    random_state=RANDOM_STATE,
)

Definir los clasificadores de conjunto

Definiremos una lista de tres clasificadores de bosque aleatorio, cada uno con un valor diferente para el parámetro max_features. Estableceremos el parámetro de construcción warm_start en True para habilitar el seguimiento de la tasa de error OOB durante el entrenamiento. También estableceremos el parámetro oob_score en True para habilitar el cálculo de la tasa de error OOB.

ensemble_clfs = [
    (
        "RandomForestClassifier, max_features='sqrt'",
        RandomForestClassifier(
            warm_start=True,
            oob_score=True,
            max_features="sqrt",
            random_state=RANDOM_STATE,
        ),
    ),
    (
        "RandomForestClassifier, max_features='log2'",
        RandomForestClassifier(
            warm_start=True,
            max_features="log2",
            oob_score=True,
            random_state=RANDOM_STATE,
        ),
    ),
    (
        "RandomForestClassifier, max_features=None",
        RandomForestClassifier(
            warm_start=True,
            max_features=None,
            oob_score=True,
            random_state=RANDOM_STATE,
        ),
    ),
]

Calcular la tasa de error OOB

Para cada clasificador, recorreremos un rango de valores de n_estimators y ajustaremos el clasificador al conjunto de datos. Registraremos la tasa de error OOB para cada valor de n_estimators y la almacenaremos en un objeto OrderedDict.

error_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)

min_estimators = 15
max_estimators = 150

for label, clf in ensemble_clfs:
    for i in range(min_estimators, max_estimators + 1, 5):
        clf.set_params(n_estimators=i)
        clf.fit(X, y)

        oob_error = 1 - clf.oob_score_
        error_rate[label].append((i, oob_error))

Visualizar la tasa de error OOB

Finalmente, graficaremos la tasa de error OOB para cada clasificador en función del número de estimadores. Esto nos permitirá identificar el número de estimadores en el que la tasa de error se estabiliza. Usaremos Matplotlib para generar la gráfica.

for label, clf_err in error_rate.items():
    xs, ys = zip(*clf_err)
    plt.plot(xs, ys, label=label)

plt.xlim(min_estimators, max_estimators)
plt.xlabel("n_estimators")
plt.ylabel("Tasa de error OOB")
plt.legend(loc="upper right")
plt.show()

Resumen

En este laboratorio, demostramos cómo medir la tasa de error Out-Of-Bag (OOB) para un modelo de bosque aleatorio utilizando scikit-learn. Generamos un conjunto de datos de clasificación binaria, definimos una lista de clasificadores de conjunto, calculamos la tasa de error OOB para cada clasificador y visualizamos los resultados. Esta técnica nos permite estimar la tasa de error de un modelo de bosque aleatorio sin necesidad de un conjunto de validación separado.