Estoy viendo este tutorial: https://www.dataquest.io/mission/75/improving-your-submission
En la sección 8, que encuentra las mejores características, muestra el siguiente código.
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()
¿Qué está haciendo k = 5, ya que nunca se usa (el gráfico todavía enumera todas las características, ya sea que use k = 1 o k = "todas")? ¿Cómo determina las mejores características, son independientes del método que uno quiere usar (ya sea regresión logística, bosques aleatorios o lo que sea)?
python
scikit-learn
usuario
fuente
fuente
Respuestas:
La clase SelectKBest solo puntúa las características usando una función (en este caso f_classif pero podría ser otras) y luego "elimina todas las características excepto la k con la puntuación más alta". http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest
Por lo tanto, es una especie de contenedor, lo importante aquí es la función que utiliza para calificar las características.
Para otras técnicas de selección de características en sklearn, lea: http://scikit-learn.org/stable/modules/feature_selection.html
Y sí, f_classif y chi2 son independientes del método predictivo que utiliza.
fuente
El parámetro k es importante si usa selector.fit_transform (), que devolverá una nueva matriz donde el conjunto de características se ha reducido a la mejor 'k'.
fuente