Olá, Lucas!
Que questionamento bom!
Rodar o cross_val_score
apenas no seu melhor modelo ou em todos os modelos encontrados pelo GridSearchCV
e RandomizedSearchCV
depende do seu objetivo. De acorco com essa documentação, o score calculado para cada iteração na validação cruzada no cross_val_score
é o retorno do método score do próprio estimador, que é por sua vez é a acurácia média para cada iteração. Falando assim talvez fique um pouco confuso, então vamos a um exemplo:
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV, KFold, RandomizedSearchCV
SEED=301
np.random.seed(SEED)
espaco_de_parametros = {
"max_depth" : [3, 5],
"min_samples_split" : [32, 64, 128],
"min_samples_leaf" : [32, 64, 128],
"criterion" : ["gini", "entropy"]
}
busca = RandomizedSearchCV(DecisionTreeClassifier(),
espaco_de_parametros,
n_iter=3,
cv = KFold(n_splits = 5, shuffle=True), random_state=SEED)
busca.fit(x_azar, y_azar)
teste = resultados.sort_values(by='rank_test_score')
scores = cross_val_score(busca, x_azar, y_azar, cv = KFold(n_splits=5, shuffle=True))
scores
Saída:
array([0.781 , 0.7905, 0.7945, 0.774 , 0.795 ])
O que seriam esses valores desse array? Como explicado mais acima, é a média dos scores de cada estimador executado em cada fold(dobra) dos dados divididos pelo KFold. Então quando você executa em todos os estimadores você terá uma visão mais geral do seu estimador em si, como ele se comporta com diferentes valores de hiperparâmetros. Nesse caso percebe-se que os valores não se alteraram muito, logo mesmo variando nossos hiperparâmetros não houve muita alteração na precisão.
Quando você executa cross_val_score
com seu melhor modelo encontrado você vai ter a validação do seu modelo, já que provavelmente será o utilizado por você. Logo, caso seu objetivo seja ter a validação do melhor modelo, como será seu funcionamento com os dados nunca vistos, então cabe executar o cross_val_score
somente nesse modelo. Caso seu objetivo seja ter uma visão mais geral do estimador que você está utilizando, nesse caso o DecisionTreeClassifier
, conforme variamos os hiperparâmetros, então você pode executar o cross_val_score
, que você obterá uma média das acurácias desses modelos nas diferentes folds(dobras).
Espero que tenha esclarecido seu questionamento, mas se ainda ficou algo que não deu para compreender nos retorne por aqui.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!