Как работает SelectKBest?

15

Я смотрю на этот учебник: https://www.dataquest.io/mission/75/improving-your-submission

В разделе 8, найдя лучшие функции, он показывает следующий код.

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

Что делает k = 5, так как он никогда не используется (график все еще перечисляет все функции, использую ли я k = 1 или k = "all")? Как он определяет лучшие характеристики, независимо от того, какой метод он хочет использовать (будь то логистическая регрессия, случайные леса или что-то еще)?

пользователь
источник
Выберите функции в соответствии с k самых высоких баллов.
Срини

Ответы:

11

Класс SelectKBest просто оценивает функции, используя функцию (в данном случае f_classif, но может быть и другими), а затем «удаляет все функции, кроме k с самыми высокими оценками». http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest

Так что это своего рода обертка, здесь важна функция, которую вы используете для оценки функций.

Для других методов выбора функций в sklearn читайте: http://scikit-learn.org/stable/modules/feature_selection.html

И да, f_classif и chi2 не зависят от используемого вами метода прогнозирования.

pgalilea
источник
2

Параметр k важен, если вы используете selector.fit_transform (), который вернет новый массив, в котором набор функций был уменьшен до лучшего значения «k».

Крис Томпсон
источник