[PYTHON] Sélection des fonctionnalités par sklearn.feature_selection

Statistiques univariées

Calculez la relation entre chaque variable explicative et la variable objective et sélectionnez la caractéristique associée avec le plus haut degré de certitude.

SelectKBest

Sélectionnez le k supérieur des variables explicatives. Normalement, l'argument score_func spécifie f_classif (valeur par défaut) pour la classification et f_regression pour la régression. Spécifiez le nombre d'entités à sélectionner dans l'argument «k».

from sklearn.datasets import load_boston
from sklearn.feature_selection import SelectKBest, f_regression

boston = load_boston()
X = boston.data
y = boston.target

#Sélectionnez 5 quantités de fonctionnalités
selector = SelectKBest(score_func=f_regression, k=5) 
selector.fit(X, y)
mask = selector.get_support()    #Obtenez le masque indiquant si chaque fonctionnalité est sélectionnée ou non
print(boston.feature_names)
print(mask)

#Obtenir uniquement la colonne de caractéristiques sélectionnée
X_selected = selector.transform(X)
print("X.shape={}, X_selected.shape={}".format(X.shape, X_selected.shape))

production

['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']
[False False  True False False  True False False False  True  True False
  True]
X.shape=(506, 13), X_selected.shape=(506, 5)

SelectPercentile

Sélectionnez les k% supérieurs des variables explicatives. Normalement, l'argument score_func spécifie f_classif (valeur par défaut) pour la classification et f_regression pour la régression. Spécifiez le rapport (0 à 100) du montant de la caractéristique à sélectionner dans l'argument «centile».

from sklearn.datasets import load_boston
from sklearn.feature_selection import SelectPercentile, f_regression

boston = load_boston()
X = boston.data
y = boston.target

#40 des fonctionnalités%choisir
selector = SelectPercentile(score_func=f_regression, percentile=40) 
selector.fit(X, y)
mask = selector.get_support()
print(boston.feature_names)
print(mask)

#Obtenir uniquement la colonne de caractéristiques sélectionnée
X_selected = selector.transform(X)
print("X.shape={}, X_selected.shape={}".format(X.shape, X_selected.shape))

production

['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']
[False False  True False False  True False False False  True  True False
  True]
X.shape=(506, 13), X_selected.shape=(506, 5)

GenericUnivariateSelect

Utilisez «mode» pour définir le mode («percentile», «k_best», «fpr», «fdr», «fwe»), et utilisez «param» pour définir les paramètres de chaque mode. Par exemple

selector = GenericUnivariateSelect(mode='percentile', score_func=f_regression, param=40)

Quand

selector = SelectPercentile(score_func=f_regression, percentile=40) 

Sont égaux.

Sélection de fonctionnalités basée sur un modèle

Sélectionnez une fonction à l'aide de l'attribut feature_importances_, qui représente l'importance de la fonction obtenue dans le modèle.

SelectFromModel

Spécifiez l'estimateur et le seuil «seuil» comme arguments.

from sklearn.datasets import load_boston
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestRegressor

boston = load_boston()
X = boston.data
y = boston.target

#Utilisez RandomForestRegressor comme estimateur. Sélectionnez-en un avec une importance médiane ou supérieure
selector = SelectFromModel(RandomForestRegressor(n_estimators=100, random_state=42), threshold="median")    
selector.fit(X, y)
mask = selector.get_support()
print(boston.feature_names)
print(mask)

#Obtenir uniquement la colonne de caractéristiques sélectionnée
X_selected = selector.transform(X)
print("X.shape={}, X_selected.shape={}".format(X.shape, X_selected.shape))

production

['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']
[ True False False False  True  True False  True False  True  True False
  True]
X.shape=(506, 13), X_selected.shape=(506, 7)

Sélection de fonction répétée

Opération dans laquelle des fonctionnalités qui ne sont pas du tout utilisées sont ajoutées une par une jusqu'à ce qu'une certaine norme soit satisfaite, ou des fonctionnalités sont supprimées une par une de l'état dans lequel toutes les fonctionnalités sont utilisées. Le montant de la fonction est sélectionné en répétant.

RFE

RFE (Recursive Feature Elimination) commence avec toutes les fonctionnalités, crée un modèle et supprime les fonctionnalités les moins importantes du modèle. Ensuite, créez à nouveau un modèle et supprimez les caractéristiques les moins importantes. Ce processus est répété jusqu'à ce qu'un nombre prédéterminé de caractéristiques soit atteint.

Pour l'argument, spécifiez l'estimateur et le nombre de caractéristiques n_features_to_select. (Nombre de fonctionnalités --n_features_to_select) Il faut beaucoup de temps pour créer un modèle => supprimer des fonctionnalités.

from sklearn.datasets import load_boston
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestRegressor

boston = load_boston()
X = boston.data
y = boston.target

#Utilisez RandomForestRegressor comme estimateur. Sélectionnez 5 quantités de fonctionnalités
selector = RFE(RandomForestRegressor(n_estimators=100, random_state=42), n_features_to_select=5)
selector.fit(X, y)
mask = selector.get_support()
print(boston.feature_names)
print(mask)

#Obtenir uniquement la colonne de caractéristiques sélectionnée
X_selected = selector.transform(X)
print("X.shape={}, X_selected.shape={}".format(X.shape, X_selected.shape))

production

['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']
[ True False False False  True  True False  True False False False False
  True]
X.shape=(506, 13), X_selected.shape=(506, 5)

référence

Recommended Posts

Sélection des fonctionnalités par sklearn.feature_selection
Sélection des caractéristiques par algorithme génétique
Sélection de fonctionnalités par importances nulles
Ensembles de données de sélection de fonctionnalités
[Français] scikit-learn 0.18 Guide de l'utilisateur 1.13 Sélection des fonctionnalités
Score de puissance prédictif pour la sélection des fonctionnalités
Prise en charge de la régression vectorielle et de la sélection des fonctionnalités
Génération de fonctionnalités avec pandas group par
Unité 5 Ingénierie des fonctionnalités pour la sélection des fonctionnalités d'apprentissage automatique