Selección de Características con Scikit-Learn

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

La selección de características es un paso importante en el aprendizaje automático. Consiste en seleccionar las características más relevantes de un conjunto de datos para mejorar la precisión y el rendimiento del modelo. En scikit-learn, el módulo sklearn.feature_selection proporciona varios métodos para la selección de características y la reducción de dimensionalidad.

Esta práctica te guiará a través del proceso de selección de características utilizando scikit-learn. Cubriremos técnicas como la eliminación de características con baja varianza, la selección de características univariadas, la eliminación recursiva de características y la selección de características utilizando SelectFromModel.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haz 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 tengas 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 tienes problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y resolveremos el problema para ti 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/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-71110{{"Selección de Características con Scikit-Learn"}} sklearn/svm -.-> lab-71110{{"Selección de Características con Scikit-Learn"}} sklearn/feature_selection -.-> lab-71110{{"Selección de Características con Scikit-Learn"}} sklearn/datasets -.-> lab-71110{{"Selección de Características con Scikit-Learn"}} ml/sklearn -.-> lab-71110{{"Selección de Características con Scikit-Learn"}} end

Eliminación de características con baja varianza

La clase VarianceThreshold en scikit-learn se puede utilizar para eliminar características con baja varianza. Las características con baja varianza generalmente no proporcionan mucha información para el modelo. Demonstraremos cómo utilizar VarianceThreshold para eliminar características con varianza cero.

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 con un umbral del 80% de variabilidad
sel = VarianceThreshold(threshold=(.8 * (1 -.8)))

## Selecciona características con alta variabilidad
X_selected = sel.fit_transform(X)

print("Forma original de X:", X.shape)
print("Forma de X con características seleccionadas:", X_selected.shape)
print("Características seleccionadas:", sel.get_support(indices=True))

Este fragmento de código demuestra cómo utilizar VarianceThreshold para eliminar características con varianza cero de un conjunto de datos. La salida mostrará la forma original del conjunto de datos y la forma después de seleccionar características con alta variabilidad.

Selección de características univariadas

La selección de características univariadas funciona seleccionando las mejores características basadas en pruebas estadísticas univariadas. En scikit-learn, hay varias clases que implementan la selección de características univariadas:

  • SelectKBest: selecciona las k mejores características con la puntuación más alta
  • SelectPercentile: selecciona un porcentaje especificado por el usuario de las características con la puntuación más alta
  • SelectFpr: selecciona características basadas en la tasa de falsos positivos
  • SelectFdr: selecciona características basadas en la tasa de descubrimiento falso
  • SelectFwe: selecciona características basadas en el error global familiar
  • GenericUnivariateSelect: permite la selección con una estrategia configurable

A continuación, se muestra un ejemplo de cómo utilizar SelectKBest para seleccionar las dos mejores características del conjunto de datos Iris:

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif

## Carga el conjunto de datos Iris
X, y = load_iris(return_X_y=True)

## Inicializa SelectKBest con la función de puntuación f_classif y k = 2
selector = SelectKBest(f_classif, k=2)

## Selecciona las mejores características
X_selected = selector.fit_transform(X, y)

print("Forma original de X:", X.shape)
print("Forma de X con características seleccionadas:", X_selected.shape)
print("Características seleccionadas:", selector.get_support(indices=True))

En este ejemplo, utilizamos la función de puntuación f_classif y seleccionamos las dos mejores características del conjunto de datos Iris. La salida mostrará la forma original del conjunto de datos y la forma después de seleccionar las mejores características.

Eliminación recursiva de características

La eliminación recursiva de características (RFE, por sus siglas en inglés) es un método de selección de características que considera de manera recursiva conjuntos de características cada vez más reducidos para seleccionar las más importantes. Funciona entrenando un estimador externo con pesos asignados a las características y eliminando las menos importantes.

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import RFE

## Carga el conjunto de datos Iris
X, y = load_iris(return_X_y=True)

## Inicializa SVC como el estimador externo
estimador = SVC(kernel="linear")

## Inicializa RFE con el estimador externo y selecciona 2 características
selector = RFE(estimador, n_features_to_select=2)

## Selecciona las mejores características
X_selected = selector.fit_transform(X, y)

print("Forma original de X:", X.shape)
print("Forma de X con características seleccionadas:", X_selected.shape)
print("Características seleccionadas:", selector.get_support(indices=True))

En este ejemplo, utilizamos un clasificador basado en vectores de soporte (SVC) como estimador externo y seleccionamos las dos mejores características del conjunto de datos Iris. La salida mostrará la forma original del conjunto de datos y la forma después de seleccionar las mejores características.

Selección de características utilizando SelectFromModel

La clase SelectFromModel es un meta-transformador que se puede utilizar con cualquier estimador que asigna importancia a cada característica. Selecciona las características basadas en su importancia y elimina las características por debajo de un umbral especificado.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel

## Carga el conjunto de datos Iris
X, y = load_iris(return_X_y=True)

## Inicializa RandomForestClassifier como el estimador
estimador = RandomForestClassifier()

## Inicializa SelectFromModel con el estimador y umbral de "media"
selector = SelectFromModel(estimador, threshold="mean")

## Selecciona las mejores características
X_selected = selector.fit_transform(X, y)

print("Forma original de X:", X.shape)
print("Forma de X con características seleccionadas:", X_selected.shape)
print("Características seleccionadas:", selector.get_support(indices=True))

En este ejemplo, utilizamos un clasificador de bosque aleatorio como el estimador y seleccionamos las características con una importancia mayor que la importancia media. La salida mostrará la forma original del conjunto de datos y la forma después de seleccionar las mejores características.

Resumen

La selección de características es un paso esencial en el aprendizaje automático para mejorar la precisión y el rendimiento de los modelos. En esta práctica, cubrimos varias técnicas, como la eliminación de características con baja varianza, la selección de características univariadas, la eliminación recursiva de características y la selección de características utilizando SelectFromModel. Estas técnicas ayudan a seleccionar las características más relevantes y a reducir la dimensionalidad del conjunto de datos, lo que resulta en un mejor rendimiento del modelo.