Seleção de Características com Scikit-Learn

Beginner

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

Introdução

A seleção de características é uma etapa importante no aprendizado de máquina. Envolve a seleção das características mais relevantes de um conjunto de dados para melhorar a precisão e o desempenho do modelo. No scikit-learn, o módulo sklearn.feature_selection fornece vários métodos para seleção de características e redução de dimensionalidade.

Este laboratório guiará você pelo processo de seleção de características usando o scikit-learn. Abordaremos técnicas como remoção de características com baixa variância, seleção de características univariada, eliminação recursiva de características e seleção de características usando SelectFromModel.

Dicas da Máquina Virtual

Após o término da inicialização da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação de operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar 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 você.

Remoção de características com baixa variância

A classe VarianceThreshold no scikit-learn pode ser usada para remover características com baixa variância. Características com baixa variância geralmente não fornecem muita informação para o modelo. Vamos demonstrar como usar VarianceThreshold para remover características com variância zero.

from sklearn.feature_selection import VarianceThreshold

X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]

## Inicializa VarianceThreshold com um limiar de 80% de variabilidade
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))

## Seleciona características com alta variabilidade
X_selected = sel.fit_transform(X)

print("Forma original de X:", X.shape)
print("Forma de X com características selecionadas:", X_selected.shape)
print("Características selecionadas:", sel.get_support(indices=True))

Este fragmento de código demonstra como usar VarianceThreshold para remover características com variância zero de um conjunto de dados. A saída mostrará a forma original do conjunto de dados e a forma após a seleção de características com alta variabilidade.

Seleção de características univariada

A seleção de características univariada funciona selecionando as melhores características com base em testes estatísticos univariados. No scikit-learn, existem várias classes que implementam a seleção de características univariada:

  • SelectKBest: seleciona as k características com as pontuações mais altas.
  • SelectPercentile: seleciona uma porcentagem especificada pelo usuário das características com as pontuações mais altas.
  • SelectFpr: seleciona características com base na taxa de falsos positivos.
  • SelectFdr: seleciona características com base na taxa de falsos descobrimentos.
  • SelectFwe: seleciona características com base no erro do tipo I familiar.
  • GenericUnivariateSelect: permite a seleção com uma estratégia configurável.

Aqui está um exemplo de uso de SelectKBest para selecionar as duas melhores características do conjunto de dados Iris:

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif

## Carrega o conjunto de dados Iris
X, y = load_iris(return_X_y=True)

## Inicializa SelectKBest com a função de pontuação f_classif e k=2
selector = SelectKBest(f_classif, k=2)

## Seleciona as melhores características
X_selected = selector.fit_transform(X, y)

print("Forma original de X:", X.shape)
print("Forma de X com características selecionadas:", X_selected.shape)
print("Características selecionadas:", selector.get_support(indices=True))

Neste exemplo, usamos a função de pontuação f_classif e selecionamos as duas melhores características do conjunto de dados Iris. A saída mostrará a forma original do conjunto de dados e a forma após a seleção das melhores características.

Eliminação Recursiva de Características

A eliminação recursiva de características (RFE) é um método de seleção de características que considera recursivamente conjuntos menores e menores de características para selecionar as mais importantes. Funciona treinando um estimador externo com pesos atribuídos às características e eliminando as características menos importantes.

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import RFE

## Carrega o conjunto de dados Iris
X, y = load_iris(return_X_y=True)

## Inicializa SVC como o estimador externo
estimator = SVC(kernel="linear")

## Inicializa RFE com o estimador externo e seleciona 2 características
selector = RFE(estimator, n_features_to_select=2)

## Seleciona as melhores características
X_selected = selector.fit_transform(X, y)

print("Forma original de X:", X.shape)
print("Forma de X com características selecionadas:", X_selected.shape)
print("Características selecionadas:", selector.get_support(indices=True))

Neste exemplo, usamos um Classificador de Vetores de Suporte (SVC) como o estimador externo e selecionamos as duas melhores características do conjunto de dados Iris. A saída mostrará a forma original do conjunto de dados e a forma após a seleção das melhores características.

Seleção de Características usando SelectFromModel

A classe SelectFromModel é um meta-transformador que pode ser usado com qualquer estimador que atribua importância a cada característica. Seleciona características com base em sua importância e remove características abaixo de um limiar especificado.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel

## Carrega o conjunto de dados Iris
X, y = load_iris(return_X_y=True)

## Inicializa RandomForestClassifier como o estimador
estimator = RandomForestClassifier()

## Inicializa SelectFromModel com o estimador e limiar de "média"
selector = SelectFromModel(estimator, threshold="mean")

## Seleciona as melhores características
X_selected = selector.fit_transform(X, y)

print("Forma original de X:", X.shape)
print("Forma de X com características selecionadas:", X_selected.shape)
print("Características selecionadas:", selector.get_support(indices=True))

Neste exemplo, usamos um Classificador Random Forest como o estimador e selecionamos características com uma importância maior que a média da importância. A saída mostrará a forma original do conjunto de dados e a forma após a seleção das melhores características.

Resumo

A seleção de características é uma etapa essencial no aprendizado de máquina para melhorar a precisão e o desempenho dos modelos. Neste laboratório, abordamos várias técnicas, como a remoção de características com baixa variância, seleção de características univariada, eliminação recursiva de características e seleção de características usando SelectFromModel. Essas técnicas ajudam na seleção das características mais relevantes e na redução da dimensionalidade do conjunto de dados, resultando em um melhor desempenho do modelo.