Introdução
Este laboratório demonstra como realizar a seleção de características univariadas antes de executar um classificador de vetores de suporte (SVC) para melhorar as pontuações de classificação. Usaremos o conjunto de dados iris (4 características) e adicionaremos 36 características não informativas. Veremos que o nosso modelo atinge o melhor desempenho quando selecionamos cerca de 10% das características.
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 praticar.
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 a aprendizagem, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para si.
Carregar os Dados
Começamos carregando o conjunto de dados iris e adicionando 36 características não informativas a ele.
import numpy as np
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
## Adicionar características não informativas
rng = np.random.RandomState(0)
X = np.hstack((X, 2 * rng.random((X.shape[0], 36))))
Criar o Pipeline
Em seguida, criamos um pipeline composto por uma transformação de seleção de características, um escalador e uma instância de SVM que combinamos para obter um estimador completo.
from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectPercentile, f_classif
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
clf = Pipeline(
[
("anova", SelectPercentile(f_classif)),
("scaler", StandardScaler()),
("svc", SVC(gamma="auto")),
]
)
Plotar a Pontuação de Validação Cruzada
Plotamos a pontuação de validação cruzada em função do percentil das características.
import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_score
score_means = list()
score_stds = list()
percentiles = (1, 3, 6, 10, 15, 20, 30, 40, 60, 80, 100)
for percentile in percentiles:
clf.set_params(anova__percentile=percentile)
this_scores = cross_val_score(clf, X, y)
score_means.append(this_scores.mean())
score_stds.append(this_scores.std())
plt.errorbar(percentiles, score_means, np.array(score_stds))
plt.title("Desempenho do SVM-Anova variando o percentil das características selecionadas")
plt.xticks(np.linspace(0, 100, 11, endpoint=True))
plt.xlabel("Percentil")
plt.ylabel("Pontuação de Precisão")
plt.axis("tight")
plt.show()
Resumo
Neste laboratório, aprendemos como realizar a seleção de características univariada antes de executar um classificador de vetores de suporte (SVC) para melhorar as pontuações de classificação. Usamos o conjunto de dados iris (4 características) e adicionamos 36 características não informativas. Descobrimos que o nosso modelo atingiu o melhor desempenho quando selecionamos cerca de 10% das características.