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)
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.
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 $.
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
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:
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:
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:
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
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é ..
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:
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:
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