[PYTHON] [Français] scikit-learn 0.18 Guide de l'utilisateur 1.13 Sélection des fonctionnalités

google traduit http://scikit-learn.org/0.18/modules/feature_selection.html [scikit-learn 0.18 Guide de l'utilisateur 1. Apprentissage supervisé](http://qiita.com/nazoking@github/items/267f2371757516f8c168#1-%E6%95%99%E5%B8%AB%E4%BB%98 À partir de% E3% 81% 8D% E5% AD% A6% E7% BF% 92)


1.13. Sélection de la quantité d'éléments

sklearn.feature_selection L'utilisation de classes de module peut améliorer le score de précision de l'estimateur ou est très élevé. Il peut être utilisé pour la sélection d'entités / la réduction de dimension dans des ensembles d'échantillons afin d'améliorer les performances des ensembles de données dimensionnelles.

1.13.1. Suppression des éléments à faible dispersion

VarianceThreshold est une approche de base simple de la sélection des fonctionnalités. Supprime toutes les entités dont la variance n'atteint pas un certain seuil. Par défaut, toutes les fonctionnalités distribuées zéro, c'est-à-dire les fonctionnalités avec la même valeur dans tous les exemples, sont supprimées. Par exemple, supposons que vous ayez un jeu de données avec des entités booléennes et que vous souhaitiez supprimer toutes les entités 1 ou zéro (activées ou désactivées) dans 80% ou plus de l'échantillon. La fonction booléenne est la variable stochastique de Bernoulli, et la variance d'une telle variable

\mathrm {Var} [X] = p(1-p)

Par conséquent, vous pouvez sélectionner en utilisant le seuil «.8 * (1-.8)».

>>>
>>> sklearn.feature_Importer à partir de la sélection VarianceThreshold
>>> X = [[0,0,1]、[0,1,0]、[1,0,0]、[0,1,1]、[0,1,0]、[0,1 、1]]
>>> sel =Seuil de variance=(.8 *(1~8)))
>>> sel.fit_transform(X)
Tableau ([[0、1]、
       [1、0]、
       [0、0]、
       [1,1]
       [1、0]、
       [1,1]))

Comme prévu, le VarianceThreshold a supprimé la première colonne. Cette colonne a une probabilité d'inclure zéro $ p = 5/6> 0,8 $.

1.13.2. Sélection d'une fonction de fonction univariée

La sélection de fonction univariée fonctionne en choisissant la meilleure fonction sur la base d'un test statistique univarié. Cela peut être considéré comme une étape de prétraitement pour l'estimateur. Scikit-learn expose les routines de sélection de fonctionnalités en tant qu'objets qui implémentent des méthodes de transformation.

Par exemple, vous pouvez exécuter un test $ \ chi ^ 2 $ sur un échantillon pour obtenir uniquement les deux meilleures fonctionnalités:

>>>
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectKBest
>>> from sklearn.feature_selection import chi2
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
>>> X_new.shape
(150, 2)

Ces objets prennent en entrée une fonction de notation qui renvoie un score univarié et une valeur p (ou uniquement les scores SelectKBest et SelectPercentile).

--Pour la régression: f_regression, [mutual_info_regression](http: // scikit- learn.org/stable/modules/generated/sklearn.feature_selection.mutual_info_regression.html#sklearn.feature_selection.mutual_info_regression) --Pour la classification: chi2, [f_classif](http: // scikit- learn.org/stable/modules/generated/sklearn.feature_selection.f_classif.html#sklearn.feature_selection.f_classif), mutual_info_classif .html # sklearn.feature_selection.mutual_info_classif)

La méthode basée sur le test F (f_) estime la dépendance linéaire entre deux variables stochastiques. Les méthodes d'information mutuelle (mutual_info_), par contre, peuvent capturer toutes sortes de dépendances statistiques, mais elles ne sont pas paramétriques et nécessitent plus d'échantillons pour une estimation précise.

--Sélection de fonctionnalités basée sur des données rares

1.13.3. Suppression des caractéristiques récursives

Suppression de caractéristiques récursives (RFE étant donné un estimateur externe qui attribue des poids aux caractéristiques (par exemple, les coefficients d'un modèle linéaire) .RFE.html # sklearn.feature_selection.RFE)) consiste à considérer de manière récursive des ensembles de fonctionnalités plus petits pour sélectionner des fonctionnalités. Tout d'abord, l'estimateur est entraîné sur l'ensemble de caractéristiques initial et des pondérations sont attribuées à chaque point caractéristique. La fonction avec le poids absolu le plus bas est ensuite supprimée de l'ensemble de caractéristiques actuel. La procédure est répétée de manière récursive pour l'ensemble élagué jusqu'à ce que le nombre final de caractéristiques à sélectionner soit atteint. RFECV exécute RFE dans une boucle de validation mutuelle et présente le nombre optimal de fonctionnalités. trouver.

--Exemple:

1.13.4. Sélection des fonctionnalités à l'aide de SelectFromModel

SelectFromModel est un estimateur avec l'attribut coef_ ou feature_importances_ après l'ajustement. Un convertisseur méta qui peut être utilisé avec. Si la valeur correspondante de coef_ ou feature_importances_ est inférieure au paramètre de seuil spécifié, la fonctionnalité est considérée comme non significative et sera supprimée. En plus de spécifier le seuil numériquement, il dispose également d'une heuristique intégrée pour trouver le seuil à l'aide d'arguments de chaîne. Les heuristiques disponibles sont «moyenne», «médiane» et «0,1 * moyenne» de ces nombres à virgule flottante. Consultez la section ci-dessous pour des exemples d'utilisation.

--Exemple:

1.13.4.1. Sélection de fonctionnalités basée sur L1

Le Modèle linéaire pénalisé par la norme L1 a une solution clairsemée. De nombreux coefficients d'estimation sont nuls. Si votre objectif est de réduire les dimensions des données utilisées par d'autres classificateurs, alors [feature_selection.SelectFromModel](http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html#sklearn] Peut être utilisé avec .feature_selection.SelectFromModel) pour sélectionner des coefficients non nuls. En particulier, un déterminant clairsemé utile à cet effet est [linear_model.Lasso] pour la régression (http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html#sklearn.linear_model. Lasso) et linear_model.LogisticRegression et [svm.LinearSVC] pour la classification (http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC).

>>>
>>> from sklearn.svm import LinearSVC
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
>>> model = SelectFromModel(lsvc, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape
(150, 3)

Dans SVM et régression logistique, le paramètre C contrôle la parcimonie. Dans Lasso, plus le paramètre alpha est élevé, moins il y a d'entités sélectionnées.

--Exemple:

Récupération L1 et détection de compression

Pour un bon choix d'alpha, Lasso n'est pas précis avec seulement quelques observations, à condition que certaines conditions soient remplies. Vous pouvez récupérer complètement un ensemble de variables nulles. En particulier, la taille de l'échantillon doit être «suffisamment grande» ou le modèle L1 doit être exécuté de manière aléatoire. «Assez grand» dépend du nombre de coefficients non nuls, du logarithme du nombre de caractéristiques, de la quantité de bruit, de la valeur absolue minimale du coefficient non nul et de la structure de la matrice X. De plus, la matrice de conception doit afficher certaines propriétés spécifiques, comme être trop décorrélée. De plus, la matrice de conception doit présenter certaines caractéristiques, comme ne pas être trop corrélée. Il n'y a pas de règles générales pour choisir les paramètres alpha pour la récupération d'un coefficient non nul. Cela peut être réglé par validation croisée (LassoCV ou LassoLarsCV), mais cela peut conduire à un modèle sous-estimé: contenir quelques variables non pertinentes n'est pas préjudiciable au score prédit. Il n'y en a pas. Au contraire, BIC (LassoLarsIC) tend à fixer une valeur élevée de α.

--Les références --Richard G. Baraniuk "Compression Sensing", IEEE Signal Processing Magazine [120] juillet 2007 http://dsp.rice.edu/sites/dsp.rice.edu/files/cs/baraniukCSlecture07.pdf

1.13.4.2. Modèle épars randomisé

Il existe certaines limitations bien connues du modèle de pénalités L1 pour la régression et la classification concernant la sélection des caractéristiques. Par exemple, Lasso est connu pour avoir tendance à sélectionner des variables individuelles dans un groupe d'entités hautement corrélées. De plus, les conditions dans lesquelles les pénalités L1 sélectionnent systématiquement les «bonnes» caractéristiques peuvent être généralement restrictives, même si la corrélation entre les caractéristiques n'est pas trop élevée. Pour pallier ce problème, il est possible d'utiliser des techniques de randomisation telles que celles présentées dans [B2009] et [M2010]. Cette dernière technique est appelée sélection de stabilité et est implémentée dans le module sklearn.linear_model. Dans le procédé de sélection de stabilité, des sous-échantillons de données sont ajustés à un modèle de pénalité L1 dans lequel la pénalité d'un sous-ensemble aléatoire de coefficients est mise à l'échelle. Plus précisément, étant donné un sous-échantillon des données $ (x_i, y_i), i \ in I $, où $ I \ subset \ {1, 2, \ ldots, n } $ est la taille $ n_I Un sous-ensemble aléatoire des données $, avec l'ajustement Lasso modifié suivant:

\hat{w_I} = \mathrm{arg}\min_{w} \frac{1}{2n_I} \sum_{i \in I} (y_i - x_i^T w)^2 + \alpha \sum_{j=1}^p \frac{ \vert w_j \vert}{s_j},

$ s_j \ in \ {s, 1 } $ est un essai indépendant de la variable de probabilité de Bernoulli juste, et $ 0 <s <1 $ est le facteur d'échelle. En répétant cette procédure sur différents sous-échantillons aléatoires et essais de Bernoulli, la procédure randomisée peut compter le nombre de fois que chaque caractéristique est sélectionnée et utiliser ces pourcentages comme score de sélection de caractéristique. RandomizedLasso a implémenté cette stratégie dans la configuration de régression à l'aide de Lasso, RandomizedLogisticRegression utilise la régression logistique et convient aux tâches de classification. Utilisez lasso_stability_path pour obtenir le chemin complet du score de stabilité ..

../_images/sphx_glr_plot_sparse_recovery_0031.png http://scikit-learn.org/stable/auto_examples/linear_model/plot_sparse_recovery.html

Pour qu'un modèle aléatoire aléatoire soit plus puissant que les statistiques F standard dans la détection d'entités non nulles, le modèle de grande vérité doit être clairsemé, en d'autres termes, seulement une petite partie d'entités non nulles. Ne devrait pas exister.

--Exemple:

1.13.4.3. Sélection d'entités basée sur l'arborescence

Vous pouvez utiliser un estimateur basé sur des arbres (voir Forêt d'arbres dans les modules sklearn.tree et sklearn.ensemble) pour calculer les charges d'entités et rejeter les entités non liées (sklearn.feature_selection.SelectFromModel). Lorsqu'il est combiné avec un méta-convertisseur)

>>>
>>> from sklearn.ensemble import ExtraTreesClassifier
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> clf = ExtraTreesClassifier()
>>> clf = clf.fit(X, y)
>>> clf.feature_importances_ 
array([ 0.04..., 0.05..., 0.4..., 0.4...])
>>> model = SelectFromModel(clf, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape 
(150, 2)

--Exemple:

1.13.5. Choix des caractéristiques dans le cadre du pipeline

La sélection des fonctionnalités est généralement utilisée comme étape de prétraitement avant l'apprentissage proprement dit. Pour ce faire avec scikit-learn, nous vous recommandons d'utiliser sklearn.pipeline.Pipeline.

clf = Pipeline([
  ('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))),
  ('classification', RandomForestClassifier())
])
clf.fit(X, y)

Dans cet extrait, sklearn.svm.LinearSVC et sklearn.feature_selection.SelectFromModel sont combinés pour évaluer l'importance des fonctionnalités et sélectionner les fonctionnalités les plus pertinentes. Le sklearn.ensemble.RandomForestClassifier est ensuite entraîné sur la sortie transformée, c'est-à-dire en utilisant uniquement les fonctionnalités pertinentes. Des opérations similaires peuvent être effectuées avec d'autres méthodes de sélection de caractéristiques et, bien sûr, avec des classificateurs qui fournissent un moyen d'évaluer l'importance des caractéristiques. Voir l'exemple sklearn.pipeline.Pipeline pour plus d'informations.


[scikit-learn 0.18 Guide de l'utilisateur 1. Apprentissage supervisé](http://qiita.com/nazoking@github/items/267f2371757516f8c168#1-%E6%95%99%E5%B8%AB%E4%BB%98 À partir de% E3% 81% 8D% E5% AD% A6% E7% BF% 92)

© 2010 --2016, développeurs scikit-learn (licence BSD)

Recommended Posts

[Français] scikit-learn 0.18 Guide de l'utilisateur 1.13 Sélection des fonctionnalités
[Français] scikit-learn 0.18 Guide de l'utilisateur 4.2 Extraction de fonctionnalités
[Français] scikit-learn 0.18 Guide de l'utilisateur 4.5. Projection aléatoire
[Français] scikit-learn 0.18 Guide de l'utilisateur 1.11. Méthode Ensemble
[Français] scikit-learn 0.18 Guide de l'utilisateur 1.15. Régression isotonique
[Français] scikit-learn 0.18 Guide de l'utilisateur 1.16. Étalonnage des probabilités
[Français] scikit-learn 0.18 Guide de l'utilisateur 3.4. Persistance du modèle
[Français] scikit-learn 0.18 Guide de l'utilisateur 2.8. Estimation de la densité
[Français] scikit-learn 0.18 Guide de l'utilisateur 4.3. Prétraitement des données
[Français] scikit-learn 0.18 Guide de l'utilisateur 4.4. Réduction de dimension non supervisée
[Français] scikit-learn 0.18 Guide de l'utilisateur Table des matières
[Français] scikit-learn 0.18 Guide de l'utilisateur 1.4. Support Vector Machine
[Français] scikit-learn 0.18 Guide de l'utilisateur 4.1. Union des pipelines et des fonctionnalités: combinaison d'estimateurs
[Français] scikit-learn 0.18 Guide de l'utilisateur 1.12. Algorithme multi-classes et algorithme multi-étiquettes
[Français] scikit-learn 0.18 Guide de l'utilisateur 3.2. Réglage des hyper paramètres de l'estimateur
[Français] scikit-learn 0.18 Guide de l'utilisateur 4.8. Convertir la cible de prédiction (y)
[Français] scikit-learn 0.18 Guide de l'utilisateur 2.7. Détection des nouveautés et des valeurs aberrantes
[Français] scikit-learn 0.18 Guide de l'utilisateur 3.1. Validation croisée: évaluer les performances de l'estimateur
[Français] scikit-learn 0.18 Guide de l'utilisateur 3.3. Évaluation du modèle: quantifier la qualité de la prédiction
Ensembles de données de sélection de fonctionnalités
[Français] scikit-learn 0.18 Guide de l'utilisateur 3.5. Courbe de vérification: tracez le score pour évaluer le modèle
[Français] scikit-learn 0.18 Guide de l'utilisateur 2.5. Décomposer les signaux en composants (problème de décomposition de la matrice)
Sélection des fonctionnalités par sklearn.feature_selection
Guide de l'utilisateur Pandas "Multi-Index / Advanced Index" (Document officiel traduction japonaise)
Guide de l'utilisateur Pandas "Manipulation des données manquantes" (Document officiel de traduction en japonais)
Sélection des caractéristiques par algorithme génétique
Sélection de fonctionnalités par importances nulles
Guide de l'utilisateur de Pandas "Formatage de tableau et tableau croisé dynamique" (Document officiel traduction japonaise)