Sélection de caractéristiques pour le SVC sur l'ensemble de données Iris

Beginner

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

Introduction

Ce laboratoire montre comment effectuer une sélection de caractéristiques univariée avant d'exécuter un classifieur à vecteurs de support (SVC) pour améliorer les scores de classification. Nous utiliserons l'ensemble de données iris (4 caractéristiques) et ajouterons 36 caractéristiques non informatives. Nous découvrirons que notre modèle atteint les meilleures performances lorsque nous sélectionnons environ 10 % des caractéristiques.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.

Charger les données

Nous commençons par charger l'ensemble de données iris et en ajoutant 36 caractéristiques non informatives.

import numpy as np
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)

## Add non-informative features
rng = np.random.RandomState(0)
X = np.hstack((X, 2 * rng.random((X.shape[0], 36))))

Créer le pipeline

Ensuite, nous créons un pipeline composé d'une transformation de sélection de caractéristiques, d'un mise à l'échelle et d'une instance de SVM que nous combinons pour avoir un estimateur complet.

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")),
    ]
)

Tracer le score de validation croisée

Nous traçons le score de validation croisée en fonction du pourcentage de caractéristiques.

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("Performance of the SVM-Anova varying the percentile of features selected")
plt.xticks(np.linspace(0, 100, 11, endpoint=True))
plt.xlabel("Percentile")
plt.ylabel("Accuracy Score")
plt.axis("tight")
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris comment effectuer une sélection de caractéristiques univariée avant d'exécuter un classifieur à vecteurs de support (SVC) pour améliorer les scores de classification. Nous avons utilisé l'ensemble de données iris (4 caractéristiques) et ajouté 36 caractéristiques non informatives. Nous avons constaté que notre modèle a atteint les meilleures performances lorsque nous avons sélectionné environ 10 % des caractéristiques.