Importância de Características com Floresta Aleatória

Beginner

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

Introdução

Neste laboratório, utilizaremos a floresta aleatória para avaliar a importância das características numa tarefa de classificação artificial. Geraremos um conjunto de dados sintético com apenas 3 características informativas. As importâncias das características da floresta serão plotadas, juntamente com a sua variabilidade inter-árvores representada pelas barras de erro.

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 o carregamento. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

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

Importar Bibliotecas

Importaremos as bibliotecas necessárias para este laboratório.

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance
import pandas as pd
import numpy as np
import time

Gerar Dados

Vamos gerar um conjunto de dados sintético com apenas 3 características informativas. Explicitamente, não embaralharemos o conjunto de dados para garantir que as características informativas corresponderão às três primeiras colunas de X. Além disso, dividiremos o nosso conjunto de dados em subconjuntos de treino e teste.

X, y = make_classification(
    n_samples=1000,
    n_features=10,
    n_informative=3,
    n_redundant=0,
    n_repeated=0,
    n_classes=2,
    random_state=0,
    shuffle=False,
)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)

Ajustar Floresta Aleatória

Ajustaremos um classificador de floresta aleatória para calcular as importâncias das características.

feature_names = [f"feature {i}" for i in range(X.shape[1])]
forest = RandomForestClassifier(random_state=0)
forest.fit(X_train, y_train)

Importância das Características baseada na Diminuição Média da Impureza

As importâncias das características são fornecidas pelo atributo ajustado feature_importances_ e são calculadas como a média e o desvio padrão da acumulação da diminuição da impureza em cada árvore. Vamos plotar a importância baseada na impureza.

start_time = time.time()
importances = forest.feature_importances_
std = np.std([tree.feature_importances_ for tree in forest.estimators_], axis=0)
elapsed_time = time.time() - start_time

print(f"Elapsed time to compute the importances: {elapsed_time:.3f} seconds")

forest_importances = pd.Series(importances, index=feature_names)

fig, ax = plt.subplots()
forest_importances.plot.bar(yerr=std, ax=ax)
ax.set_title("Importâncias das características usando MDI")
ax.set_ylabel("Diminuição média da impureza")
fig.tight_layout()

Importância das Características baseada na Permutação de Características

A importância das características por permutação supera as limitações da importância das características baseada na impureza: não apresentam viés para características de alta cardinalidade e podem ser calculadas em um conjunto de teste deixado de fora. Calcularemos a importância por permutação completa. As características são embaralhadas n vezes e o modelo é reajustado para estimar a sua importância. Vamos plotar a classificação de importância.

start_time = time.time()
result = permutation_importance(
    forest, X_test, y_test, n_repeats=10, random_state=42, n_jobs=2
)
elapsed_time = time.time() - start_time
print(f"Elapsed time to compute the importances: {elapsed_time:.3f} seconds")

forest_importances = pd.Series(result.importances_mean, index=feature_names)

fig, ax = plt.subplots()
forest_importances.plot.bar(yerr=result.importances_std, ax=ax)
ax.set_title("Importâncias das características usando permutação no modelo completo")
ax.set_ylabel("Diminuição média de precisão")
fig.tight_layout()
plt.show()

Resumo

Neste laboratório, geramos um conjunto de dados sintético com apenas 3 características informativas e utilizamos uma floresta aleatória para avaliar a importância das características. Plotamos as importâncias das características da floresta, juntamente com a variabilidade entre as árvores, representada pelas barras de erro. Utilizamos a importância baseada na impureza e a importância por permutação de características para calcular as importâncias das características. As mesmas características foram detectadas como as mais importantes usando ambos os métodos.