Eliminação Recursiva de Recursos com Validação Cruzada

Beginner

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

Introdução

Neste laboratório, iremos percorrer um processo passo a passo de implementação da Eliminação Recursiva de Recursos com Validação Cruzada (RFECV) utilizando o scikit-learn. O RFECV é usado para seleção de recursos, que é o processo de seleção de um subconjunto de recursos relevantes para uso na construção de modelos. Usaremos uma tarefa de classificação com 15 recursos, dos quais 3 são informativos, 2 são redundantes e 10 são não informativos.

Dicas da Máquina Virtual

Após o arranque da VM, 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, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Geração de Dados

Vamos gerar uma tarefa de classificação utilizando a função make_classification do scikit-learn. Vamos gerar 500 amostras com 15 recursos, dos quais 3 são informativos, 2 são redundantes e 10 são não informativos.

from sklearn.datasets import make_classification

X, y = make_classification(
    n_samples=500,
    n_features=15,
    n_informative=3,
    n_redundant=2,
    n_repeated=0,
    n_classes=8,
    n_clusters_per_class=1,
    class_sep=0.8,
    random_state=0,
)

Treinamento e Seleção do Modelo

Criaremos o objeto RFECV e calculamos as pontuações validadas cruzadamente. A estratégia de pontuação "accuracy" otimiza a proporção de amostras classificadas corretamente. Usaremos regressão logística como estimador e validação cruzada estratificada k-fold com 5 dobras.

from sklearn.feature_selection import RFECV
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression

min_features_to_select = 1  ## Número mínimo de recursos a considerar
clf = LogisticRegression()
cv = StratifiedKFold(5)

rfecv = RFECV(
    estimator=clf,
    step=1,
    cv=cv,
    scoring="accuracy",
    min_features_to_select=min_features_to_select,
    n_jobs=2,
)
rfecv.fit(X, y)

print(f"Número ótimo de recursos: {rfecv.n_features_}")

Plot number of features vs. cross-validation scores

We will plot the number of features selected against the cross-validation scores. We will use matplotlib to create the plot.

import matplotlib.pyplot as plt

n_scores = len(rfecv.cv_results_["mean_test_score"])
plt.figure()
plt.xlabel("Number of features selected")
plt.ylabel("Mean test accuracy")
plt.errorbar(
    range(min_features_to_select, n_scores + min_features_to_select),
    rfecv.cv_results_["mean_test_score"],
    yerr=rfecv.cv_results_["std_test_score"],
)
plt.title("Recursive Feature Elimination \nwith correlated features")
plt.show()

Resumo

Neste laboratório, percorremos o processo de implementação da Eliminação Recursiva de Recursos com Validação Cruzada (RFECV) usando o scikit-learn. Geramos uma tarefa de classificação com 15 recursos, dos quais 3 eram informativos, 2 redundantes e 10 não informativos. Usamos regressão logística como estimador e validação cruzada estratificada k-fold com 5 dobras. Plotamos o número de recursos selecionados contra as pontuações de validação cruzada. Descobrimos que o número ótimo de recursos era 3, o que correspondia ao verdadeiro modelo gerador. Também notamos um platô de pontuações equivalentes para 3 a 5 recursos selecionados devido à introdução de recursos correlacionados.