Wie funktioniert SelectKBest?

14

Ich schaue mir dieses Tutorial an: https://www.dataquest.io/mission/75/improving-your-submission

In Abschnitt 8, in dem die besten Funktionen gefunden werden, wird der folgende Code angezeigt.

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()

Was macht k = 5, da es nie verwendet wird (in der Grafik sind immer noch alle Funktionen aufgeführt, unabhängig davon, ob ich k = 1 oder k = "alle" verwende)? Wie werden die besten Funktionen ermittelt, sind sie unabhängig von der gewünschten Methode (ob logistische Regression, zufällige Wälder oder was auch immer)?

Nutzer
quelle
Wählen Sie Features gemäß den k höchsten Punktzahlen aus.
Srini

Antworten:

11

Die SelectKBest-Klasse bewertet die Features nur mithilfe einer Funktion (in diesem Fall f_classif, könnte aber auch eine andere sein) und entfernt dann "alle Features mit Ausnahme der k Features mit der höchsten Punktzahl". http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest

Es ist also eine Art Wrapper. Wichtig ist hier die Funktion, mit der Sie die Features bewerten.

Weitere Techniken zur Funktionsauswahl in sklearn finden Sie unter: http://scikit-learn.org/stable/modules/feature_selection.html

Und ja, f_classif und chi2 sind unabhängig von der von Ihnen verwendeten Vorhersagemethode.

pgalilea
quelle
2

Der Parameter k ist wichtig, wenn Sie selector.fit_transform () verwenden, das ein neues Array zurückgibt, in dem der Funktionsumfang auf das beste 'k' reduziert wurde.

Chris Thompson
quelle