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.