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

Utilização do cross_val_score com StratifiedShuffleSplit nos dados de validação

Não entendi a utilização do StratifiedShuffleSplit no cross_val_score após a otimização dos hiperparâmetros com RandomizedSearchCV da aula 5. Por que está sendo utilizado o StratifiedShuffleSplit no cross_val_score já que os dados de validação já foram separados manualmente utilizando o train_test_split?

x_treino_teste, x_validacao, y_treino_teste, y_validacao = train_test_split(x_azar, y_azar, test_size=0.2, shuffle=True, stratify=y_azar) (...) split = StratifiedShuffleSplit(n_splits = 1, test_size = 0.25) (...) scores = cross_val_score(busca, x_validacao, y_validacao, cv = split)

2 respostas
solução!

Oi, Bruno! Tudo bom com você? Eu espero que sim!

Desculpa a demora em te dar um retorno.

Na aula o instrutor explica que pode não ser possível executar o cross validation independente do fold, para que fosse possível conseguir isso seria necessário separar os dados de outra forma.

Quando foi executado o RandomizedSearchCV era trabalhado apenas a fase de treino e teste, e a fase de validação com cross_val_score(). Mas para o objetivo da aula o instrutor adicionou mais uma fase tornando assim, três diferentes fases para o projeto: uma fase de treino do modelo (ou de vários modelos) na busca de otimizar os hiperparâmetros; uma fase de teste, comparando os modelos para encontrar os melhores resultados; e uma fase de validação, tentando alcançar uma estimativa real desse algorítimo.

Para seguir essas três fases seria necessário separar os dados em 3 conjuntos distintos: o conjunto de treino, um de teste e outro de validação. No entanto, a função train_test_split() retorna apenas 2 conjuntos de dados, por conta disso, é preciso fazer uma forma diferente de separar os conjuntos. Nesse caso, a divisão uniu os dados de treino e teste em uma mesma variável, separando-os dos dados de validação. Mesmo assim, ainda é necessário separar o conjunto de treino e teste

O StratifiedShuffleSplit vem para executar uma função no lugar do KFlod, mas de uma forma que permita aleatorizar os dados e quebrá-los de acordo com a estratificação dos dados definidos nele. No código ele divide os dados de treino e teste para o classificador, estratificando-os de forma que seja reservado 25% do conjunto de treino e teste para teste. Se fosse utilizado um cross validation com 2 folds, seria executado duas vezes o algorítimo com 50% dos dados em cada uma das vezes, já com StratifiedShuffleSplit é feita apenas uma iteração com 80% dos dados para o treino, e 20% para teste, diminuindo também o tempo de execução se comparado com o código anterior.

Eu espero ter te ajudado! Se surgir outra dúvida estarei à disposição ;-)

Bons estudos!

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

Entendido! Obrigado!