Comment fonctionne SelectKBest?

15

Je regarde ce tutoriel: https://www.dataquest.io/mission/75/improving-your-submission

À la section 8, trouver les meilleures fonctionnalités, il montre le code suivant.

import numpy as np
from sklearn.feature_selection import SelectKBest, f_classif

predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked", "FamilySize", "Title", "FamilyId"]

# Perform feature selection
selector = SelectKBest(f_classif, k=5)
selector.fit(titanic[predictors], titanic["Survived"])

# Get the raw p-values for each feature, and transform from p-values into scores
scores = -np.log10(selector.pvalues_)

# Plot the scores.  See how "Pclass", "Sex", "Title", and "Fare" are the best?
plt.bar(range(len(predictors)), scores)
plt.xticks(range(len(predictors)), predictors, rotation='vertical')
plt.show()

Que fait k = 5, car il n'est jamais utilisé (le graphique répertorie toujours toutes les fonctionnalités, que j'utilise k = 1 ou k = "all")? Comment détermine-t-il les meilleures caractéristiques, sont-elles indépendantes de la méthode que l'on veut utiliser (que ce soit la régression logistique, les forêts aléatoires ou autre)?

utilisateur
la source
Sélectionnez les fonctionnalités en fonction des k scores les plus élevés.
Srini

Réponses:

11

La classe SelectKBest ne fait que marquer les fonctionnalités à l'aide d'une fonction (dans ce cas f_classif mais pourrait être d'autres), puis "supprime toutes les fonctionnalités à l'exception des k scores les plus élevés". http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest

Donc, son genre de wrapper, l'important ici est la fonction que vous utilisez pour noter les fonctionnalités.

Pour d'autres techniques de sélection de fonctionnalités dans sklearn, lisez: http://scikit-learn.org/stable/modules/feature_selection.html

Et oui, f_classif et chi2 sont indépendants de la méthode prédictive que vous utilisez.

pgalilea
la source
2

Le paramètre k est important si vous utilisez selector.fit_transform (), qui renverra un nouveau tableau où l'ensemble de fonctionnalités a été réduit au meilleur «k».

Chris Thompson
la source