Estimação de Erro OOB de Floresta Aleatória

Beginner

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

Introdução

Neste laboratório, demonstraremos como medir a taxa de erro Out-Of-Bag (OOB) para um modelo Random Forest utilizando a biblioteca Python scikit-learn. A taxa de erro OOB é a média de erros para cada observação de treino calculada usando previsões das árvores que não contêm a observação na sua respectiva amostra bootstrap. Isto permite que o modelo Random Forest seja ajustado e validado durante o treino.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para si.

Importação de Bibliotecas Necessárias

Começaremos importando as bibliotecas necessárias, incluindo scikit-learn, NumPy e Matplotlib. Também definiremos um valor de estado aleatório para garantir a reprodutibilidade.

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

RANDOM_STATE = 123

Gerar um Conjunto de Dados de Classificação Binária

Em seguida, geraremos um conjunto de dados de classificação binária utilizando a função make_classification fornecida pela scikit-learn. Esta função permite especificar o número de amostras, características, clusters por classe e características informativas. Usaremos um valor fixo de estado aleatório para garantir a reprodutibilidade.

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

Definir os Classificadores de Conjunto

Definiremos uma lista de três classificadores Random Forest, cada um com um valor diferente para o parâmetro max_features. Definiremos o parâmetro de construção warm_start como True para permitir o acompanhamento da taxa de erro OOB durante o treinamento. Também definiremos o parâmetro oob_score como True para permitir o cálculo da taxa de erro 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 a Taxa de Erro OOB

Para cada classificador, percorreremos um intervalo de valores de n_estimators e ajustaremos o classificador ao conjunto de dados. Registraremos a taxa de erro OOB para cada valor de n_estimators e a armazenaremos em um 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 a Taxa de Erro OOB

Finalmente, plotaremos a taxa de erro OOB para cada classificador em função do número de estimadores. Isso nos permitirá identificar o número de estimadores em que a taxa de erro se estabiliza. Usaremos o Matplotlib para gerar o gráfico.

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("Taxa de erro OOB")
plt.legend(loc="upper right")
plt.show()

Resumo

Neste laboratório, demonstramos como medir a taxa de erro Out-Of-Bag (OOB) para um modelo Random Forest usando o scikit-learn. Geramos um conjunto de dados de classificação binária, definimos uma lista de classificadores de conjunto, calculamos a taxa de erro OOB para cada classificador e visualizamos os resultados. Esta técnica permite estimar a taxa de erro de um modelo Random Forest sem a necessidade de um conjunto de validação separado.