Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

É necessário usar todo o resultado do RandomizedSearchCV para validação cruzada?

Após rodar o RandomizedSearchCV o ideal é que realizemos a validação NESTED CROSS-VALIDATION. Minha dúvida é se eu tenho que passar todo o resultado do RandomizedSearchCV pelo Cross_val_score? Não posso pegar, por exemplo, os 3, 5 ou até mesmo apenas 1 dos classificadores gerados e fazer a validação cruzada?

3 respostas

Olá, Lucas! Tudo bem com você?

Primeiramente gostaria de pedir desculpas pela demora em te retornar.

Sim, é possível treinar com apenas um dos classificadores retornados. De acordo com a documentação, o primeiro parâmetro é um estimator, podemos então passar somente um ou mais (o RandomizedSearchCV retorna vários estimadores).

Fazer o uso de menos estimadores reduziria bastante o custo computacional usado para realizar a validação. Poderíamos fazer da seguinte forma:

from sklearn.model_selection import cross_val_score

scores = cross_val_score(busca.best_estimator_, x_azar, y_azar, cv = KFold(n_splits=5, shuffle=True))
scores

Estamos passando agora o melhor estimador que obteve o maior valor de mean_test_score nos resultados de RandomizedSearchCV.

Caso você queira um valor fixo de estimadores para usar no cross_val_score você pode alterar isso no parâmetro n_iter=x do RandomizedSearchCV, onde x é o número de estimadores com o qual você deseja trabalhar.

Espero ter ajudado, mas se ainda persistir alguma dúvida estou sempre à disposição.

:)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Já me ajuda muito. Agradeço a sua disposição, mas sem querer abusar, gostaria de tirar uma nova dúvida no mesmo assunto.

Estou usando n_iter=100 do RandomizedSearchCV para que eu possa aumentar a possibilidade de selecionar bons parâmetros para meu modelo.

Vamos supor que acabei de rodar o RandomizedSearchCV com n_iter=100. Agora eu desejo realizar o cross_val_score, porém sei que meu melhor modelo é o busca.best_estimator_.

Caso eu rode o cross_val_score apenas no melhor modelo, o que eu ganho e o que eu perco em quando se fala em qualidade?

Seria indicado rodar em todos modelos encontrados no RandomizedSearchCV ou Apenas no que eu pretendo usar?

solução!

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!