Cómo realizar la selección de funciones

El método más simple es probablemente la Selección de características univariadas, donde se aplica una prueba estadística a cada característica individualmente. Solo conserva las mejores características de acuerdo con los puntajes de resultados de la prueba; Consulte la documentación de scikit-learn para ver la lista de las pruebas estadísticas más utilizadas:

http://scikit-learn.org/modules/…

Un método más robusto pero más de “fuerza bruta” donde el impacto de las características combinadas se evalúan juntas se denomina “Eliminación de características recursivas”:

  1. Primero, capacite a un modelo con todas las características y evalúe su desempeño en los datos retenidos.
  2. Luego deje caer, digamos las características 10% más débiles (por ejemplo, la característica con coeficientes absolutos mínimos en un modelo lineal) y vuelva a entrenar las características restantes.
  3. Itere hasta que observe una fuerte caída en la precisión predictiva del modelo.

Aquí hay un ejemplo, nuevamente usando scikit-learn:

http://scikit-learn.org/auto_exa…

Y aquí está la implementación:

https://github.com/scikit-learn/…

Si desea entrenar un modelo (generalizado) ya sea para clasificaciones (p. Ej., Regresión logística) o regresión (p. Ej., Regresión de cresta, también conocida como mínimo cuadrado penalizado l2), debe considerar agregar un regularizador L1 que promueva la selección de características * mientras * aprendizaje: coeficiente para las características más débiles se establece en cero por el algoritmo de aprendizaje en sí. El nombre habitual para el método lineal penalizado L1 es “el lazo”:

http://scikit-learn.org/modules/…

El valor óptimo de la fuerza del regularizador se puede encontrar mediante validación cruzada. Para hacer esto de manera eficiente, puede usar el método LARS como se describe aquí:

http://scikit-learn.org/modules/…

LARS permite calcular los valores de todos los coeficientes para diferentes valores de la fuerza de penalización (también conocida como la ruta de regularización) de manera muy eficiente:

http://scikit-learn.org/auto_exa…

También es posible calcular una ruta de regularización de manera eficiente con otros algoritmos como Descenso de coordenadas (y tal vez también Descenso de gradiente estocástico) utilizando el truco “reinicios en caliente”:

http://scikit-learn.org/auto_exa…

Para tener en cuenta la inestabilidad de Lasso cuando se trata de características altamente correlacionadas, debe considerar combinar la penalización L1 con L2 (la penalización compuesta se llama Elastic Net) que aplastará globalmente los coeficientes pero evitará poner a cero aleatoriamente uno de los 2 relevantes altamente correlacionados caracteristicas:

http://scikit-learn.org/auto_exa…

La estabilidad en los modelos de selección de características para el Lasso puro también se puede lograr mediante el arranque de varios modelos de Lazo en los pliegues del conjunto de datos y seleccionando la intersección (o unión, no estoy seguro) de las características que no son de edición cero. Este método se llama BoLasso y aún no se implementa en el scikit (siempre se agradece la solicitud de extracción): el documento de referencia es:

http://www.di.ens.fr/~fbach/fbac…

Otras formas de “arreglar el lazo” (tomado del tutorial de F. Bach NIPS 2009):

  • Lazo adaptativo (Zou, 2006),
  • Lazo relajado (Meinshausen, 2008),
  • umbralización (Lounici, 2008),
  • selección de estabilidad (Meinshausen Buhlmann, 2008), Wasserman y Roeder (2009)

Editar : la selección de estabilidad se ha implementado en scikit-learn más recientemente.

Finalmente, si usted está en un estado de ánimo bayesiano, los antecedentes inteligentes como el utilizado en la Determinación automática de relevancia (ARD) deberían brindarle resultados similares:

http://scikit-learn.org/modules/…

Oliver y Shameek ya han dado respuestas bastante completas, así que haré una descripción general de alto nivel de la selección de funciones

La comunidad de aprendizaje automático clasifica la selección de características en 3 categorías diferentes: métodos de filtro, métodos basados ​​en envoltorios y métodos integrados.

Métodos de filtro
Estos incluyen una prueba estadística simple para determinar si una característica es estadísticamente significativa, por ejemplo, el valor de p en la prueba para determinar si la hipótesis nula debe ser aceptada y la característica rechazada. Esto no tiene en cuenta las interacciones de las funciones y, por lo general, no es una forma muy recomendada de hacer la selección de funciones, ya que puede conducir a la pérdida de información.

Métodos basados ​​en envoltorios
Esto implica el uso de un algoritmo de aprendizaje para informar el subconjunto óptimo de características. Un ejemplo sería cómo RandomForest es ampliamente utilizado por la comunidad competitiva de ciencia de datos para determinar la importancia de las características al observar la ganancia de información. Esto puede proporcionar una visión general bastante rápida y sucia de qué características son importantes, lo que puede ayudar a proporcionar una validación informal de las características de ingeniería. Los modelos basados ​​en árboles como RandomForest también son robustos frente a problemas como la multicolinealidad, valores perdidos, valores atípicos, etc., además de poder descubrir algunas interacciones entre características. Sin embargo, esto puede ser bastante costoso computacionalmente.

Métodos Embebidos
Esto implica llevar a cabo la selección de características y el ajuste del modelo al mismo tiempo. Algunos métodos incluyen algoritmos codiciosos como la selección hacia adelante y hacia atrás, así como modelos basados ​​en Lasso (L1) y Elastic Net (L1 + L2). Esto probablemente requerirá algo de experiencia para saber dónde detenerse para la selección hacia atrás y hacia adelante, así como para ajustar los parámetros para los modelos basados ​​en regularización.

PCA no es una técnica de selección de características, pero uno puede considerarla como una técnica de extracción de características.
la selección de funciones significa seleccionar un subconjunto útil de todas las funciones. Por lo tanto, no debe transformar las características de entrada en otro conjunto de características en la selección de características.
Una técnica para seleccionar características es utilizar algunos criterios de clasificación para clasificar características, por ejemplo:
1) Criterios de correlación: con este criterio puede clasificar las características en orden de correlación con las etiquetas de los datos.

2) Criterios de información mutua: la alta información mutua de una característica con la etiqueta significa alta relevancia de esa característica.

Otra técnica son los métodos de envoltura.
Puede leer más sobre la selección de funciones en el siguiente artículo:
Guyon, I. y Elisseeff, A. (2003). Una introducción a la selección de variables y características. The Journal of Machine Learning Research , 3 , 1157-1182.

La motivación de la Selección de características (FS) es minimizar el número de características, eliminando las características irrelevantes y poco confiables, y maximizar la potencia del clasificador. ¿Dos razones por las que deseamos minimizar la cantidad de funciones? Para reducir el costo en velocidad y memoria para ejecutar el clasificador y para compensar la maldición de la dimensionalidad.

Las técnicas de selección de características se pueden clasificar en términos generales en ‘envoltorios’ y ‘filtros’. Los contenedores utilizan estimaciones de precisión proporcionadas por el modelo de aprendizaje para seleccionar las características, mientras que los filtros utilizan las características de los datos para evaluar las características. Aunque computacionalmente costoso, el Wrapper es el mejor método de selección de características para la precisión (Hall y Holmes, 2003).

Mencionaré un método de envoltura simple: Selección de funciones directas (FFS). La forma en que funciona FFS es bastante simple:

  • Elija una métrica de evaluación asociada con / o precisión. Vamos a llamarlo ” puntaje “. En cada iteración buscamos encontrar características que maximicen esta puntuación .
  • En la primera iteración, digamos que de cuatro características [A, B, C, D], resulta que B es el que tiene mejor desempeño. Guardamos esta función en un subconjunto de funciones, [B], y su puntaje correspondiente, como max_score .
  • En la próxima iteración, procesamos nuestro subconjunto de características [B] con una de las características restantes [A, C, D]. Entonces, procesando, [B con A], [B con C] y [B con D], de estos tres, digamos que encontramos la mejor puntuación para [B con C]. Si la mejor puntuación> max_score , agregamos la función correspondiente a nuestro feature_subset que ahora es [B, C] .
  • Continuamos las iteraciones hasta que nuestro subconjunto de características se optimice para max_score . Luego declaramos que este subconjunto de características es lo mejor que podemos hacer.

El siguiente diagrama ilustra el método con más claridad. Tenga en cuenta que continuamos hasta la iteración 3: la puntuación es máxima para feature_subset [B, C]. Sin embargo, a veces podemos desear incluir todas nuestras funciones, como lo han hecho los sabios autores a continuación.

Hall, M. y Holmes, G. (2003). Técnicas de selección de atributos de evaluación comparativa para la minería de datos de clase discreta. Conocimiento e Ingeniería de Datos, Transacciones IEEE , 15 (6), 1437-1447.

Tradicionalmente, el análisis de componentes principales (PCA) se usa para la reducción de dimensionalidad (en un sentido matemático). Sin embargo, si le interesan las construcciones (factores) latentes que sus características ( indicadores o ítems , en análisis factorial y terminología de modelado de variables latentes) representan y miden, entonces el análisis factorial exploratorio (EFA) y / o el análisis factorial confirmatorio (CFA) son apropiados. . Para obtener más información sobre esto, consulte mi respuesta aquí en el sitio Cross Validated: página en stackexchange.com.

Modelar un fenómeno en términos de construcciones latentes (factores) tiene un beneficio adicional, ya que este enfoque permite una mayor reducción en la dimensionalidad y el modelado en un nivel más alto de abstracción (pero aún podrá obtener información sobre características / indicadores, si esto es posible). necesario).

Aprenda un modelo de ML basado en hiperplano y observe los valores de peso. Si algo grande significa que es tan valioso.

Si solo desea capacitar a un predictor, aproveche los beneficios de la red elástica o la regularización L1 que selecciona implícitamente características importantes

Bosques al azar es otra forma de hacer esto. Analice los nodos aprendidos y mantenga la frecuencia de cada dimensión de entidad definida como un nodo de árbol.

Hay muchas otras formas algorítmicas también como la selección hacia atrás o hacia adelante que básicamente selecciona la dimensión más distintiva con avidez una por una para cada iteración

Un enfoque completamente diferente es proyectar datos en un mejor espacio con trucos del kernel o PCA, algoritmos de proyección tipo LDA. Sin embargo, de esta forma se aflojan los significados semánticos de las características.

  • SIGIR 2010: Generación y selección de características para la recuperación de información: http://alex.smola.org/workshops/
  • Métodos integrados de Lal et al., 2006: http://www.kyb.tuebingen.mpg.de/
  • ¿Cuáles son algunos métodos de selección de características para SVM?
  • Prueba de propiedad: página en tau.ac.il (a través de la página de inicio de COMS 6998)
  • Pregunta relacionada: ¿Cuáles son algunos enfoques principales para la reducción de la dimensionalidad para la clasificación?

Si eres un principiante en el dominio de Selección de funciones, te recomendaría el video tutorial de Isabelle Guyon sobre Selección de funciones en VideoLectures. Cubre casi todo en su tutorial de dos horas de duración. También es la autora del artículo que probablemente ha citado más en Literatura de selección de características en Journal of Machine Learning Research

Los métodos de selección de características pueden clasificarse como filtros y envoltorios. Los métodos basados ​​en pruebas estadísticas mencionadas por Olivier Grisel son filtros. Uno puede usar Weka para obtener dichos rankings por métodos de Infogain, Chisquare, CFS. Los envoltorios, por otro lado, pueden usar un algoritmo de aprendizaje con un clasificador como SVM o bosques aleatorios para buscar e informar subconjuntos de características óptimas. Por ej. uno puede usar un algoritmo genético (GA) para construir una población de soluciones aleatorias (subconjuntos de características). Cada uno de estos subconjuntos genera internamente un conjunto de datos reducido que se puede alimentar a SVM que devuelve una precisión de clasificación de validación cruzada (CVA) de 10 veces. El CVA de 10 veces puede estar asociado con la función de condición física del subconjunto correspondiente. Después de que se construye la población, GA toma el control y sigue mejorando el panorama de la condición física. Después de varias iteraciones, uno puede esperar obtener un subconjunto de características óptimo.

La selección de características es un paso importante en el desarrollo de cualquier método de predicción y clasificación. En este hilo se han descrito excelentes técnicas para la selección de características. Mi preocupación particular es la estabilidad en la selección de funciones. Creo firmemente que la estabilidad en la selección de características conduce a una optimización excesiva en los métodos de predicción. He creado un hilo sobre este tema, agradeceré comentar sobre el siguiente hilo

¿Crees que los algoritmos de predicción sufren de una optimización excesiva?

FeatureFu de fuente abierta de LinkedIn, un conjunto de herramientas diseñado para permitir la ingeniería de características creativa y ágil

FeatureFu: Creación de modelos de aprendizaje automático con funciones | Ingeniería de LinkedIn

Creo que esto depende de lo que quieras hacer con la selección de funciones. Si tiene 10 millones de funciones y solo quiere reducir el tamaño, la PCA y ese tipo de cosas probablemente sean las mejores.

Si tiene como 100 características específicas y desea elegir las más informativas o las más predictivas para un algoritmo específico o solo el grupo de características que no sufren de colinealidad entre ellas, etc., entonces, tal vez necesite mirar otros enfoques Puede encontrar respuestas en las “preguntas relacionadas” aquí.

Sugeriría PCA para empezar. Por lo general, funciona bastante bien y se puede encontrar en muchas bibliotecas de ML.
Análisis de componentes principales
Página en otago.ac.nz – una introducción decente
sklearn.decomposition.PCA – documentación de scikit-learn 0.15.2 – una buena implementación.

Hola, tengo una pregunta sobre la selección de funciones. Tengo una base de datos de muestras de miRNA que tiene características M (valores de M miRNA) y estoy construyendo un lassificador de clases múltiples con él. Para la validación, estoy usando un conjunto de datos diferente que tiene N miRNA donde N siempre es menor que M y solo las características P son comunes entre M y N. En este caso, si selecciono características en la base de datos original de características M, obtengo Características M1 que es mucho más pequeña que M. Observé que M1 y N no tienen ninguna característica común (y algunas veces muy pocas características comunes) y no puedo validar el clasificador con la segunda base de datos. Al hacer la selección de características en la base de datos original, ¿hay alguna manera de decirle al algoritmo de selección de características que siempre mantenga algunas características (por ejemplo, si encuentra dos características altamente correlacionadas, en función de lo que le decimos a la selección de características que mantenga, solo elimina el que no está en la lista de mantenimiento)?
¿O hay alguna otra forma de abordar el problema que tengo en mis manos?

Pruebe este documento de revisión de JMLR, también se ve muy citado Página en jmlr.org

Iría con la recomendación de Roman Trusov para comenzar con PCA. PCA le permite determinar la importancia de cada característica independiente en su conjunto de datos. El resultado es la importancia ponderada de cada característica. Si ve características que tienen un bajo impacto, pueden eliminarse de futuros análisis.

¿Qué tal el uso de información mutua entre la función y la etiqueta? scikit-learn tiene soporte para calcular la información mutua.


@ 1.11. Selección de características

Este puede ser bueno:
http://davinci.fmph.uniba.sk/~uh

More Interesting

El límite de decisión de los árboles de decisión es el eje paralelo. Random Forests es un conjunto de árboles. ¿Cuál es el límite de decisión de los bosques aleatorios?

¿Cuáles son los mejores métodos para recopilar datos de entrenamiento para el algoritmo Naive Bayes?

¿Cuál es un resumen del trabajo de Jordan Boyd-Graber sobre la Respuesta incremental interactiva a preguntas que le valió el Premio a la Demostración Excepcional de NIPS?

¿Hay alguna manera de determinar o reducir las opciones con las que uno debería experimentar para mejorar (por ejemplo) una red neuronal clasificadora de imágenes binarias?

¿Existen demostraciones efectivas de relevancia semántica?

Todos dicen que el aprendizaje automático ocupará trabajos de un gran no. de personas, ¿es esto cierto? ¿Hay algún lado positivo?

¿Cómo funcionan los árboles de decisión para la regresión?

¿Qué tan difícil es aprender el aprendizaje automático y el aprendizaje profundo si tienes un trabajo diario?

¿Qué opinas del TensorFlow Eager en comparación con Pytorch?

¿Cuál es la forma correcta de calcular la similitud de coseno entre una consulta y un documento? Cuando calculo la magnitud del documento, ¿sumo los cuadrados de todos los términos del documento o solo los de la consulta?

¿Aprender implementando un buen enfoque, o leyendo y usando marcos como TensorFlow?

¿Cuál es el mejor lenguaje de programación para el aprendizaje automático? ¿Qué idioma es mejor para programar microcontroladores y otras partes de hardware?

¿Cuáles son los avances actuales en la ciencia de datos genómicos?

¿Qué quieres decir con aprendizaje profundo?

¿Cuáles son las diferencias entre un científico de aprendizaje automático y un científico de datos?