Seleção de Características Baseada em Modelo e Sequencial

Beginner

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

Introdução

Este laboratório demonstra duas abordagens para seleção de características: baseada em modelo e seleção sequencial de características. O objetivo é selecionar as características mais importantes de um conjunto de dados fornecido. Usamos o conjunto de dados de Diabetes, composto por 10 características coletadas de 442 pacientes com diabetes.

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 praticar.

Às 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 a aprendizagem, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para si.

Carregamento dos Dados

Carregamos o conjunto de dados de Diabetes do scikit-learn e imprimimos a sua descrição.

from sklearn.datasets import load_diabetes

diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
print(diabetes.DESCR)

Importância das Características a Partir dos Coeficientes

Para obter uma ideia da importância das características, utilizamos o estimador RidgeCV. As características com o valor absoluto de coef_ mais elevado são consideradas as mais importantes.

from sklearn.linear_model import RidgeCV

ridge = RidgeCV(alphas=np.logspace(-6, 6, num=5)).fit(X, y)
importance = np.abs(ridge.coef_)
feature_names = np.array(diabetes.feature_names)
plt.bar(height=importance, x=feature_names)
plt.title("Importâncias das características através dos coeficientes")
plt.show()

Selecionando Características com Base na Importância

Selecionamos as duas características mais importantes de acordo com os coeficientes usando SelectFromModel. SelectFromModel aceita um parâmetro threshold e selecionará as características cuja importância (definida pelos coeficientes) estiver acima deste limiar.

from sklearn.feature_selection import SelectFromModel

threshold = np.sort(importance)[-3] + 0.01

sfm = SelectFromModel(ridge, threshold=threshold).fit(X, y)
print(f"Características selecionadas por SelectFromModel: {feature_names[sfm.get_support()]}")

Selecionando Características com Seleção Sequencial de Características

Utilizamos o Selecionador Sequencial de Características (SFS) para selecionar as características. O SFS é um procedimento guloso onde, em cada iteração, escolhemos a melhor nova característica a adicionar às nossas características selecionadas com base numa pontuação de validação cruzada. Também podemos ir na direção inversa (SFS reversa), ou seja, começar com todas as características e escolher gulosamente as características a remover uma a uma.

from sklearn.feature_selection import SequentialFeatureSelector

sfs_forward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="forward").fit(X, y)
sfs_backward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="backward").fit(X, y)

print(f"Características selecionadas pela seleção sequencial direta: {feature_names[sfs_forward.get_support()]}")
print(f"Características selecionadas pela seleção sequencial reversa: {feature_names[sfs_backward.get_support()]}")

Resumo

Este laboratório demonstrou duas abordagens para a seleção de características: baseada em modelos e seleção sequencial de características. Usamos o estimador RidgeCV para obter a importância das características e SelectFromModel para selecionar as características com base na importância. O Selecionador Sequencial de Características é um procedimento guloso onde, em cada iteração, escolhemos a melhor nova característica a adicionar às nossas características selecionadas com base numa pontuação de validação cruzada.