SelectKBest 是如何工作的?

数据挖掘 Python scikit-学习
2021-10-05 00:56:05

我正在看这个教程: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")?它如何确定最佳特征,它们是否独立于人们想要使用的方法(无论是逻辑回归、随机森林还是其他)?

2个回答

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 与您使用的预测方法无关。

如果您使用selector.fit_transform(),则 k 参数很重要,它将返回一个新数组,其中特征集已减少到最佳“k”。