Sat. Nov 26th, 2022

Desarrolle un sólido flujo de trabajo de selección de funciones para cualquier problema supervisado

Aprenda a enfrentar uno de los mayores desafíos del aprendizaje automático con lo mejor de los selectores de funciones de Sklearn.Foto por Steve Johnson

Introducción

Hoy en día, es común que los conjuntos de datos tengan cientos, si no miles, de características. En la superficie, esto puede parecer algo bueno: más funciones brindan más información sobre cada muestra. Pero la mayoría de las veces, estas funciones adicionales no brindan mucho valor e introducen complejidad. El mayor desafío del aprendizaje automático es crear modelos que tengan un poder predictivo sólido mediante el uso de la menor cantidad de funciones posible. Pero dados los tamaños masivos de los conjuntos de datos actuales, es fácil perder la supervisión de qué características son importantes y cuáles no. Es por eso que hay toda una habilidad que aprender en el campo de ML: la selección de características. La selección de funciones es el proceso de elegir un subconjunto de las funciones más importantes mientras se intenta retener la mayor cantidad de información posible (un extracto del primer artículo de esta serie). Como la selección de funciones es un problema tan apremiante, hay una gran cantidad de soluciones. puedes seleccionar entre🤦‍♂️🤦‍♂️. Para ahorrarle un poco de dolor, le enseñaré 3 técnicas de selección de características que, cuando se usan juntas, pueden potenciar el rendimiento de cualquier modelo. Este artículo le brindará una descripción general de estas técnicas y cómo usarlas sin preguntarse demasiado sobre las partes internas. Para una comprensión más profunda, he escrito publicaciones separadas para cada uno con el meollo de la cuestión explicado. ¡Empecemos!

Introducción al conjunto de datos y al enunciado del problema

Trabajaremos con el conjunto de datos de Ansur Male, que contiene más de 100 medidas diferentes del cuerpo del personal del Ejército de EE. UU. He estado usando este conjunto de datos en exceso a lo largo de esta serie de selección de funciones porque contiene 98 funciones numéricas, un conjunto de datos perfecto para enseñar la selección de funciones.pngIntentaremos predecir el peso en libras, por lo que es un problema de regresión. Establezcamos un rendimiento base con regresión lineal simple. LR es un buen candidato para este problema porque podemos esperar que las medidas corporales estén linealmente correlacionadas: para el rendimiento base, obtuvimos un R-cuadrado impresionante de 0,956. Sin embargo, esto podría deberse a que también hay una columna de peso en kilogramos entre las características, lo que le da al algoritmo todo lo que necesita (estamos tratando de predecir el peso en libras). Entonces, intentemos sin él: Ahora, tenemos 0.945, pero logramos reducir la complejidad del modelo.

Paso I: Umbral de varianza

La primera técnica estará dirigida a las propiedades individuales de cada característica. La idea detrás del Umbral de varianza es que las características con una varianza baja no contribuyen mucho a las predicciones generales. Estos tipos de características tienen distribuciones con muy pocos valores únicos o variaciones lo suficientemente bajas como para que no importe. VT nos ayuda a eliminarlos usando Sklearn. Una preocupación antes de aplicar VT es la escala de características. A medida que los valores de una característica aumentan, la varianza crece exponencialmente. Esto significa que las características con diferentes distribuciones tienen diferentes escalas, por lo que no podemos comparar sus varianzas con seguridad. Entonces, debemos aplicar alguna forma de normalización para llevar todas las características a la misma escala y luego aplicar VT. Aquí está el código: Después de la normalización (aquí, estamos dividiendo cada muestra por la media de la función), debe elegir un umbral entre 0 y 1. En lugar de usar el método .transform() del estimador VT, estamos usando get_support( ) que proporciona una máscara booleana (valores verdaderos para las funciones que deben conservarse). Luego, se puede usar para crear subconjuntos de datos mientras se conservan los nombres de las columnas. Esta puede ser una técnica simple, pero puede llevar mucho tiempo eliminando características inútiles. Para una visión más profunda y más explicaciones del código, puede dirigirse a este artículo:

Paso II: Correlación por pares

Recortaremos aún más nuestro conjunto de datos centrándonos en las relaciones entre las características. Una de las mejores métricas que muestran una conexión lineal es el coeficiente de correlación de Pearson (denotado r). La lógica detrás del uso de r para la selección de características es simple. Si la correlación entre las características A y B es 0,9, significa que puede predecir los valores de B utilizando los valores de A el 90 % de las veces. En otras palabras, en un conjunto de datos donde A está presente, puede descartar B o viceversa.Foto del autorNo hay un estimador de Sklearn que implemente la selección de funciones en función de la correlación. Por lo tanto, lo haremos por nuestra cuenta: esta función es una abreviatura que devuelve los nombres de las columnas que deben eliminarse en función de un umbral de correlación personalizado. Por lo general, el umbral estará por encima de 0,8 para estar seguros. En la función, primero creamos una matriz de correlación usando .corr(). A continuación, creamos una máscara booleana para incluir solo las correlaciones por debajo de la diagonal de la matriz de correlación. Usamos esta máscara para crear un subconjunto de la matriz. Finalmente, en una lista de comprensión, encontramos los nombres de las funciones que deben descartarse y devolverlas. Hay muchas cosas que no expliqué sobre el código. Aunque esta función funciona bien, sugiero leer mi artículo separado sobre la selección de funciones en función del coeficiente de correlación. Expliqué completamente el concepto de correlación y cómo es diferente de la causalidad. También hay una sección separada sobre el trazado de la matriz de correlación perfecta como un mapa de calor y, por supuesto, la explicación de la función anterior. Para nuestro conjunto de datos, elegiremos un umbral de 0.9: La función nos dice que eliminemos 13 características: Ahora, solo quedan 35 características.

Paso III: Eliminación de características recursivas con validación cruzada (RFECV)

Finalmente, elegiremos el conjunto final de características en función de cómo afectan el rendimiento del modelo. La mayoría de los modelos de Sklearn tienen atributos .coef_ (modelos lineales) o .feature_importances_ (modelos basados ​​en árboles y conjuntos) que muestran la importancia de cada característica. Por ejemplo, ajustemos el modelo de regresión lineal al conjunto actual de características y veamos los coeficientes calculados:pngEl DataFrame anterior muestra las características con los coeficientes más pequeños. Cuanto menor es el peso o el coeficiente de una característica, menos contribuye al poder predictivo del modelo. Con esta idea en mente, la Eliminación recursiva de funciones elimina las funciones una por una mediante la validación cruzada hasta que queda el mejor conjunto de funciones más pequeño. Sklearn implementa esta técnica bajo la clase RFECV que toma un estimador arbitrario y varios otros argumentos: Después de ajustar el estimador a los datos, podemos obtener una máscara booleana con valores verdaderos que codifican las características que deben conservarse. Finalmente podemos usarlo para crear un subconjunto de los datos originales una última vez: después de aplicar RFECV, logramos descartar 5 características más. Evaluemos un modelo final de GradientBoostingRegressor en este conjunto de datos seleccionado de funciones y veamos su rendimiento: aunque obtuvimos una ligera caída en el rendimiento, logramos eliminar casi 70 funciones, lo que redujo significativamente la complejidad del modelo. .feature_importances_ atributos así como detalles adicionales de lo que sucede en cada ronda de eliminación de RFE:

Resumen

La selección de características no debe tomarse a la ligera. Al tiempo que reducen la complejidad del modelo, algunos algoritmos pueden incluso ver un aumento en el rendimiento debido a la falta de características que distraigan en el conjunto de datos. Tampoco es aconsejable confiar en un solo método. En lugar de eso, aborde el problema desde diferentes ángulos y use varias técnicas. Hoy vimos cómo aplicar la selección de características a un conjunto de datos en tres etapas: En función de las propiedades de cada característica usando Umbral de varianza. En base a las relaciones entre características usando Correlación por pares. Basado en cómo las características afectan el rendimiento de un modelo. El uso de estas técnicas en procesión debería brindarle resultados confiables para cualquier problema supervisado que enfrente.

Lectura adicional sobre la selección de características