Seleção de Características para SVC no Conjunto de Dados Iris

Beginner

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

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.