Je travaille sur le problème avec trop de fonctionnalités et la formation de mes modèles prend beaucoup trop de temps. J'ai mis en œuvre un algorithme de sélection directe pour choisir les fonctionnalités.
Cependant, je me demandais si scikit-learn avait un algorithme de sélection en aval / de régression pas à pas?
Réponses:
Non, sklearn ne semble pas avoir d'algorithme de sélection en aval. Cependant, il fournit une élimination des fonctionnalités récursive, qui est un algorithme d'élimination des fonctionnalités glouton similaire à la sélection arrière séquentielle. Voir la documentation ici:
http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
la source
coef_
interface. Ceci exclurait la méthode basée sur l’arbre, etc. Cependant, je pense que ce que @Maksud a demandé est ce qui est décrit dans "Une introduction à l’apprentissage statistique" de James, dans lequel les fonctionnalités sont ajoutées / supprimées de manière récursive par leur importance, qui est quantifiée par la précision de la validation. . Cela permet de sélectionner les caractéristiques de tous les types de modèles, et non des modèles paramétriques linéaires.Sklearn a un algorithme de sélection directe, bien qu'il ne s'appelle pas cela dans scikit-learn. La méthode de sélection des fonctionnalités appelée F_regression dans scikit-learn inclura séquentiellement les fonctionnalités qui améliorent le plus le modèle, jusqu'à ce qu'il y ait des
K
fonctionnalités dans le modèle (K est une entrée).Il commence par régresser individuellement les étiquettes de chaque entité, puis en observant laquelle améliore le modèle le plus à l'aide de la statistique F. Ensuite, il intègre la fonctionnalité gagnante dans le modèle. Il parcourt ensuite les fonctionnalités restantes pour rechercher la fonctionnalité suivante qui améliore le plus le modèle, en utilisant à nouveau la statistique F ou le test F. Cela jusqu’à ce qu’il y ait K caractéristiques dans le modèle.
Notez que les entités restantes qui sont en corrélation avec les entités incorporées dans le modèle ne seront probablement pas sélectionnées, car elles ne sont pas en corrélation avec les résidus (bien qu'elles puissent être en corrélation avec les étiquettes). Cela aide à se protéger contre la multi-colinéarité.
la source
Scikit-learn ne prend effectivement pas en charge la régression par étapes. En effet, ce qu'on appelle communément la «régression par étapes» est un algorithme basé sur les valeurs p des coefficients de régression linéaire, et scikit-learn évite délibérément l'approche par inférence de l'apprentissage par modèle (test de signification, etc.). De plus, la pure méthode MLS n'est que l'un des nombreux algorithmes de régression et, du point de vue de l'acquisition de connaissances scientifiques, ce n'est ni très important, ni l'un des meilleurs.
Il y a cependant quelques conseils à donner à ceux qui ont encore besoin d'un bon moyen de sélectionner des fonctionnalités avec des modèles linéaires:
ElasticNet
ouLasso
.StandardScaler
, puis commandez-les simplement parmodel.coef_
. Pour des covariables parfaitement indépendantes, cela équivaut à un tri par valeurs p. La classe lesklearn.feature_selection.RFE
fera pour vous etRFECV
évaluera même le nombre optimal de fonctionnalités.statsmodels
mlxtend
package compatible avec scikit-learn prend en charge cette approche pour tout estimateur et toute métrique.statsmodels
, car ce package calcule les valeurs p pour vous. Une sélection de base en avant-arrière pourrait ressembler à ceci:`` `
Cet exemple afficherait le résultat suivant:
la source
En fait, il existe un algorithme appelé "Forward_Select" qui utilise Statsmodels et vous permet de définir votre propre métrique (AIC, BIC, Adjusted-R-Squared ou ce que vous préférez) pour ajouter progressivement une variable au modèle. L'algorithme peut être trouvé dans la section commentaires de cette page - faites défiler vers le bas et vous le verrez au bas de la page.
https://planspace.org/20150423-forward_selection_with_statsmodels/
J'ajouterais que l'algorithme a aussi une fonctionnalité intéressante: vous pouvez l'appliquer à des problèmes de classification ou de régression! Vous devez juste le dire.
Essayez-le et voyez par vous-même.
la source
En réalité, sklearn ne dispose pas d'algorithme de sélection directe, pensait une demande d'extraction avec une implémentation de la sélection des fonctionnalités avancées attend dans le référentiel Scikit-Learn depuis avril 2017.
Comme alternative, il y a une sélection en avant et une étape en avant dans mlxtend . Vous pouvez trouver son document dans le sélecteur de fonctions séquentiel
la source