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.