Estoy trabajando en el problema con demasiadas funciones y la capacitación de mis modelos lleva demasiado tiempo. Implementé el algoritmo de selección directa para elegir características.
Sin embargo, me preguntaba si scikit-learn tiene un algoritmo de selección progresiva / regresión gradual.
feature-selection
scikit-learn
Maksud
fuente
fuente
Respuestas:
No, sklearn no parece tener un algoritmo de selección hacia adelante. Sin embargo, proporciona la eliminación de características recursivas, que es un algoritmo de eliminación de características codicioso similar a la selección secuencial hacia atrás. Vea la documentación aquí:
http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
fuente
coef_
interfaz. Esto descartaría el método basado en árbol, etc. Sin embargo, creo que lo que pidió @Maksud es lo que se describe en "Introducción al aprendizaje estadístico" de James en el que las características se agregan / eliminan recursivamente por su importancia que cuantificó mediante la precisión del conjunto de validación . Esto permite la selección de características en todos los tipos de modelos, no solo los paramétricos lineales.Sklearn TIENE un algoritmo de selección hacia adelante, aunque no se llama así en scikit-learn. El método de selección de características llamado F_regression en scikit-learn incluirá secuencialmente características que mejoren más el modelo, hasta que haya
K
características en el modelo (K es una entrada).Comienza por la regresión de las etiquetas en cada característica individualmente, y luego observando qué característica mejoró más el modelo usando la estadística F. Luego incorpora la característica ganadora en el modelo. Luego, itera a través de las características restantes para encontrar la siguiente característica que mejora más el modelo, nuevamente utilizando la estadística F o la prueba F. Hace esto hasta que haya K características en el modelo.
Tenga en cuenta que las características restantes que están correlacionadas con las características incorporadas en el modelo probablemente no se seleccionarán, ya que no se correlacionan con los residuos (aunque podrían correlacionarse bien con las etiquetas). Esto ayuda a proteger contra la multicolinealidad.
fuente
Scikit-learn de hecho no es compatible con la regresión gradual. Esto se debe a que lo que comúnmente se conoce como 'regresión por pasos' es un algoritmo basado en valores p de coeficientes de regresión lineal, y scikit-learn evita deliberadamente el enfoque inferencial para el aprendizaje de modelos (pruebas de significación, etc.). Además, OLS puro es solo uno de los numerosos algoritmos de regresión, y desde el punto de vista de scikit-learn no es muy importante ni uno de los mejores.
Sin embargo, hay algunos consejos para aquellos que todavía necesitan una buena forma de selección de características con modelos lineales:
ElasticNet
oLasso
.StandardScaler
, y luego ordene sus funciones solo pormodel.coef_
. Para covariables perfectamente independientes es equivalente a ordenar por valores p. La clasesklearn.feature_selection.RFE
lo hará por usted eRFECV
incluso evaluará la cantidad óptima de características.statsmodels
mlxtend
paquete compatible con scikit-learn admite este enfoque para cualquier estimador y cualquier métrica.statsmodels
, ya que este paquete calcula los valores p por usted. Una selección básica hacia adelante y hacia atrás podría verse así:`` `
Este ejemplo imprimiría el siguiente resultado:
fuente
De hecho, hay un buen algoritmo llamado "Forward_Select" que utiliza modelos de estadísticas y le permite establecer su propia métrica (AIC, BIC, Adjusted-R-Squared, o lo que quiera) para agregar progresivamente una variable al modelo. El algoritmo se puede encontrar en la sección de comentarios de esta página: desplácese hacia abajo y lo verá cerca de la parte inferior de la página.
https://planspace.org/20150423-forward_selection_with_statsmodels/
Yo agregaría que el algoritmo también tiene una buena característica: ¡puede aplicarlo a problemas de clasificación o regresión! Solo tienes que contarlo.
Pruébalo y compruébalo por ti mismo.
fuente
En realidad, sklearn no tiene un algoritmo de selección directa, pensó que una solicitud de extracción con una implementación de selección de características directas espera en el repositorio Scikit-Learn desde abril de 2017.
Como alternativa, hay una selección hacia adelante y hacia atrás un paso adelante en mlxtend . Puede encontrar su documento en el selector de características secuenciales
fuente