Selección de características para SVC en el conjunto de datos Iris

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica demuestra cómo realizar la selección de características univariadas antes de ejecutar un clasificador de vectores de soporte (SVC) para mejorar las puntuaciones de clasificación. Utilizaremos el conjunto de datos iris (4 características) y agregaremos 36 características no informativas. Veremos que nuestro modelo alcanza el mejor rendimiento cuando seleccionamos alrededor del 10% de las características.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y resolveremos el problema para usted de inmediato.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/preprocessing("Preprocessing and Normalization") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/pipeline("Pipeline") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49306{{"Selección de características para SVC en el conjunto de datos Iris"}} sklearn/preprocessing -.-> lab-49306{{"Selección de características para SVC en el conjunto de datos Iris"}} sklearn/feature_selection -.-> lab-49306{{"Selección de características para SVC en el conjunto de datos Iris"}} sklearn/pipeline -.-> lab-49306{{"Selección de características para SVC en el conjunto de datos Iris"}} sklearn/model_selection -.-> lab-49306{{"Selección de características para SVC en el conjunto de datos Iris"}} sklearn/datasets -.-> lab-49306{{"Selección de características para SVC en el conjunto de datos Iris"}} ml/sklearn -.-> lab-49306{{"Selección de características para SVC en el conjunto de datos Iris"}} end

Cargar los datos

Comenzamos cargando el conjunto de datos iris y agregando 36 características no informativas a él.

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))))

Crear el pipeline

A continuación, creamos un pipeline que consta de una transformación de selección de características, un escalador y una instancia de SVM que combinamos para tener un 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")),
    ]
)

Graficar la puntuación de validación cruzada

Graficamos la puntuación de validación cruzada en función del percentil de las 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("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()

Resumen

En esta práctica, aprendimos cómo realizar la selección de características univariadas antes de ejecutar un clasificador de vectores de soporte (SVC) para mejorar las puntuaciones de clasificación. Utilizamos el conjunto de datos iris (4 características) y agregamos 36 características no informativas. Encontramos que nuestro modelo alcanzó el mejor rendimiento cuando seleccionamos alrededor del 10% de las características.