不,SelectKBest
工作方式不同。
它将分数函数作为参数,该函数必须适用于一对 ( , )。score 函数必须返回一个分数数组,对于 X 的每个特征X一个分数(此外,它还可以返回 p 值,但这些既不需要也不需要)。然后简单地保留中得分最高个特征。XyX[:,i]XSelectKBest
kX
因此,例如,如果您chi2
作为分数函数传递,SelectKBest
将计算和的每个特征之间的 chi2 统计量(假设是类标签)。较小的值意味着该特征独立于。非随机相关,因此很可能提供重要信息。仅保留Xyyyk
最后,SelectKBest
实现了默认行为,因此您可以编写select = SelectKBest()
然后调用select.fit_transform(X, y)
(实际上我看到人们这样做)。在这种情况下SelectKBest
使用f_classif
score 函数。的值解释为类标签,并为 X 的每个特征计算一个统计量。使用的公式正是这里给出的公式: 单向 ANOVA F-test,其中的不同值的数量。较大的分数表明组的均值并不完全相同。这不是很丰富,只有在满足一些相当严格的条件时才是正确的:例如,值yX[:,i]XFKyKX[:,i]必须来自正态分布的总体,且组的总体方差必须相同。我不明白为什么这在实践中应该成立,如果没有这个假设,值是没有意义的。因此,不小心使用可能会因为错误的原因而丢掉许多功能。KFSelectKBest()