Estou olhando para este tutorial: https://www.dataquest.io/mission/75/improving-your-submission
Na seção 8, encontrando os melhores recursos, mostra o código a seguir.
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()
O que k = 5 está fazendo, uma vez que nunca é usado (o gráfico ainda lista todos os recursos, se eu uso k = 1 ou k = "all")? Como ele determina os melhores recursos, eles são independentes do método que se deseja usar (seja regressão logística, florestas aleatórias ou qualquer outra coisa)?
python
scikit-learn
do utilizador
fonte
fonte
Respostas:
A classe SelectKBest apenas pontua os recursos usando uma função (nesse caso, f_classif, mas podem ser outros) e, em seguida, "remove todos os recursos de pontuação mais altos, exceto os k". http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest
Portanto, é um tipo de invólucro, o importante aqui é a função que você usa para pontuar os recursos.
Para outras técnicas de seleção de recursos no sklearn, leia: http://scikit-learn.org/stable/modules/feature_selection.html
E sim, f_classif e chi2 são independentes do método preditivo usado.
fonte
O parâmetro k é importante se você usar selector.fit_transform (), que retornará uma nova matriz na qual o conjunto de recursos foi reduzido para o melhor 'k'.
fonte