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

[Dúvida] Dúvida na separação dos conjuntos de teste, validação e treino

Oi, pessoal! Alguém poderia me ajudar a entender como foi feita a separação dos dados de teste, treino e validação (no vídeo Validando o modelo)? Entendi que na primeira linha da célula foram separados 15% dos dados para teste. Mas não entendi o que foi feito na segunda linha. Os 85% restantes foram divididos entre treino e validação? E não usamos nenhum parâmetro na função train_test_split indicando qual proporção dos dados cada conjunto deve ter?

Já agradeço!

Um abraço

4 respostas
solução!

Oi, Mariana, tudo bem?

Na primeira linha, estamos separando 15% dos dados para o conjunto de teste. Ou seja, dos dados originais, 15% vão para x_teste e y_teste, enquanto os 85% restantes permanecem em x e y, que serão usados na próxima divisão (treino e validação).

Na segunda linha, dividimos esses 85% restantes entre treinamento e validação. Essa etapa é importante para ajustar e avaliar o desempenho do modelo ao longo do processo de desenvolvimento, sem utilizar os dados de teste, que devem ser reservados para a avaliação final.

A função train_test_split foi usada duas vezes:

  1. Primeira divisão – separa 15% dos dados para teste:

    x, x_teste, y, y_teste = train_test_split(x, y, test_size=0.15, stratify=y, random_state=5)
    
  2. Segunda divisão – divide os 85% restantes entre treino e validação:

    x_treino, x_val, y_treino, y_val = train_test_split(x, y, stratify=y, random_state=5)
    

Na segunda chamada da função, como não foi especificado o parâmetro test_size, ela usa o valor padrão (test_size=0.25). Compartilho a documentação onde tem essa informação. Assim, os dados remanescentes (85%) são divididos em:

ConjuntoCálculoPorcentagem dos dados originais
Validação25% de 85% → 0.25 × 0.8521,25%
Treinamento75% de 85% → 0.75 × 0.8563,75%

Portanto, ao final, temos aproximadamente 63,75% dos dados para treino, 21,25% para validação e 15% para teste.

Espero ter ajudado.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

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

Muitíssimo obrigada, Monalisa!

Será que poderia me ajudar mais uma vez? Eu estou tentando fazer essa divisão em um projeto, mas está dando um erro na segunda linha de código. Quando rodo esta segunda linha de código, os valores de x e y estão diferentes entre si, porque 15% do y fora tirados na primeira linha de código, para formar o conjunto de teste. Então, como x e y ficaram com quantidades diferentes, a segunda linha não está rodando:


#Separando 15% dos dados para teste
X, X_teste, y, y_teste = train_test_split(x, y, test_size = 0.15, stratify = y, random_state = 5)

print(len(x), len(y)) 
1268 1077                    #antes de rodar a linha de código acima, tanto y quanto x tinham 1268 observações

#Dos 85% de dados que sobraram após a separação de 15% para teste, vamos fazer a seguinte divisão: 25% para validação e 75% para treino
X_treino, X_val, y_treino, y_val = train_test_split(x, y, stratify = y, random_state = 5)

ValueError: Found input variables with inconsistent numbers of samples: [1268, 1077]

Se puder me ajudar, agradeço!

Oi, Mariana!

O erro está acontecendo porque, na primeira linha de código, você sobrescreveu as variáveis x e y com os 85% dos dados restantes, só que de forma não sincronizada.

Vamos olhar com mais cuidado:

X, X_teste, y, y_teste = train_test_split(x, y, test_size = 0.15, stratify = y, random_state = 5)

Aqui você atribuiu novos valores para X e y, mas as variáveis x e y originais já estavam com nomes minúsculos. O problema acontece porque você misturou letras maiúsculas e minúsculas: usou X e X_teste, mas a variável x original ainda existe e não foi atualizada. Ou seja, ao rodar a próxima linha:

X_treino, X_val, y_treino, y_val = train_test_split(x, y, stratify = y, random_state = 5)

Ela está tentando dividir o x original (com 1268 linhas) com o y reduzido (com 1077 linhas), o que gera o erro de tamanhos inconsistentes.

Como resolver?

Use sempre os mesmos nomes de variáveis ou então mantenha o x e y originais intactos e crie novos nomes para os conjuntos:

# Primeira divisão: separa 15% dos dados para teste
x_treino_val, x_teste, y_treino_val, y_teste = train_test_split(x, y, test_size=0.15, stratify=y, random_state=5)

# Segunda divisão: divide os 85% restantes entre treino e validação
x_treino, x_val, y_treino, y_val = train_test_split(x_treino_val, y_treino_val, test_size=0.25, stratify=y_treino_val, random_state=5)

Assim, você evita confusão com nomes de variáveis e garante que os dados estão sempre sincronizados.

Abraços e bons estudos!