No, SelectKBest
funciona de forma diferente.
Toma como parámetro una función de puntuación, que debe ser aplicable a un par ( $X$ , $y$ ). La función de puntuación debe devolver una matriz de puntuaciones, una por cada característica $X[:, i]$ de $X$ (adicionalmente, también puede devolver los valores p, pero estos no son necesarios ni requeridos). SelectKBest
entonces simplemente retiene el primer $k$ características de $X$ con las puntuaciones más altas.
Así, por ejemplo, si pasa chi2
como función de puntuación, SelectKBest
calculará el estadístico chi2 entre cada característica de $X$ y $y$ (se supone que son etiquetas de clase). Un valor pequeño significará que la característica es independiente de $y$ . Un valor grande significará que la característica está relacionada de forma no aleatoria con $y$ y, por lo tanto, es probable que proporcione información importante. Sólo $k$ se mantendrán las características.
Finalmente, SelectKBest
tiene implementado un comportamiento por defecto, por lo que se puede escribir select = SelectKBest()
y luego llamar a select.fit_transform(X, y)
(de hecho he visto a gente hacerlo). En este caso SelectKBest
utiliza el f_classif
función de puntuación. Esto interpreta los valores de $y$ como etiquetas de clase y calcula, para cada característica $X[:, i]$ de $X$ , un $F$ -estadística. La fórmula utilizada es exactamente la que se da aquí: Prueba F de ANOVA de una vía con $K$ el número de valores distintos de $y$ . Una puntuación grande sugiere que las medias de los $K$ los grupos no son todos iguales. Esto no es muy informativo, y sólo es cierto cuando se cumplen algunas condiciones bastante estrictas: por ejemplo, los valores $X[:, i]$ deben proceder de poblaciones con distribución normal, y la varianza poblacional del $K$ los grupos deben ser los mismos. No veo por qué esto debería sostenerse en la práctica, y sin esta suposición el $F$ -Los valores no tienen sentido. Por lo tanto, el uso de SelectKBest()
descuidadamente podría desechar muchas características por razones equivocadas.