Selección de características basada en modelos y selección secuencial

Beginner

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

Introducción

Esta práctica demuestra dos enfoques para la selección de características: basado en modelos y selección secuencial de características. El objetivo es seleccionar las características más importantes de un conjunto de datos dado. Utilizamos el conjunto de datos de Diabetes, que consta de 10 características recolectadas de 442 pacientes con diabetes.

Consejos sobre la VM

Una vez que se haya iniciado 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 sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Carga de los datos

Cargamos el conjunto de datos de Diabetes de scikit-learn y mostramos su descripción.

from sklearn.datasets import load_diabetes

diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
print(diabetes.DESCR)

Importancia de las características a partir de los coeficientes

Para obtener una idea de la importancia de las características, utilizamos el estimador RidgeCV. Las características con el valor absoluto más alto de coef_ se consideran las más importantes.

from sklearn.linear_model import RidgeCV

ridge = RidgeCV(alphas=np.logspace(-6, 6, num=5)).fit(X, y)
importance = np.abs(ridge.coef_)
feature_names = np.array(diabetes.feature_names)
plt.bar(height=importance, x=feature_names)
plt.title("Feature importances via coefficients")
plt.show()

Selección de características basadas en importancia

Seleccionamos las dos características que son las más importantes de acuerdo con los coeficientes utilizando SelectFromModel. SelectFromModel acepta un parámetro threshold y seleccionará las características cuya importancia (definida por los coeficientes) sea superior a este umbral.

from sklearn.feature_selection import SelectFromModel

threshold = np.sort(importance)[-3] + 0.01

sfm = SelectFromModel(ridge, threshold=threshold).fit(X, y)
print(f"Features selected by SelectFromModel: {feature_names[sfm.get_support()]}")

Selección de características con selección secuencial de características

Utilizamos el Selector Secuencial de Características (SFS) para seleccionar características. El SFS es un procedimiento voraz donde, en cada iteración, elegimos la mejor nueva característica para agregar a nuestras características seleccionadas basadas en una puntuación de validación cruzada. También podemos ir en la dirección inversa (SFS hacia atrás), es decir, comenzar con todas las características y elegir vorazmente características para eliminar una por una.

from sklearn.feature_selection import SequentialFeatureSelector

sfs_forward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="forward").fit(X, y)
sfs_backward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="backward").fit(X, y)

print(f"Features selected by forward sequential selection: {feature_names[sfs_forward.get_support()]}")
print(f"Features selected by backward sequential selection: {feature_names[sfs_backward.get_support()]}")

Resumen

Esta práctica mostró dos enfoques para la selección de características: selección basada en modelos y selección secuencial de características. Utilizamos el estimador RidgeCV para obtener la importancia de las características y SelectFromModel para seleccionar características basadas en la importancia. El Selector Secuencial de Características es un procedimiento voraz donde, en cada iteración, elegimos la mejor nueva característica para agregar a nuestras características seleccionadas basadas en una puntuación de validación cruzada.