0Pricing
Learn AI with Python · Aula

Estratégias de validação cruzada

k-fold, k-fold estratificado, deixar um de fora e divisão de séries temporais — quando usar cada abordagem.

Estratégias de validação cruzada é uma aula grátis de Learn AI with Python no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Learn AI with Python, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Learn AI with Python inclui 4 aulas no total.

Por que usar validação cruzada

Uma única divisão entre treino e teste pode ser favorável ou desfavorável por acaso. A validação cruzada repete a avaliação em diferentes divisões e calcula a média das pontuações, fornecendo uma estimativa mais confiável do desempenho.

Validação cruzada em K dobras

KFold divide os dados em K partes iguais. Cada dobra é usada uma vez como conjunto de teste, enquanto as demais treinam o modelo. Você obtém K pontuações para calcular a média.

from sklearn.model_selection import KFold

kf = KFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in kf.split(X):
    Xtr, Xte = X[train_idx], X[test_idx]
    ytr, yte = y[train_idx], y[test_idx]
    # train and evaluate here

Validação estratificada em K dobras para classificação

Na classificação, a validação simples em K dobras pode produzir dobras com proporções de classes desequilibradas. StratifiedKFold preserva as proporções das classes em todas as dobras.

from sklearn.model_selection import StratifiedKFold

skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in skf.split(X, y):
    # each fold keeps the same class balance as the full set
    pass

Atalho de cross_val_score

cross_val_score executa todo o ciclo para você e retorna um vetor com as pontuações de cada dobra. Para classificadores, ele usa automaticamente o StratifiedKFold.

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(random_state=0)
scores = cross_val_score(clf, X, y, cv=5, scoring="accuracy")
print(scores)
print("Mean:", scores.mean(), "Std:", scores.std())

Escolhendo o número de dobras

Mais dobras (por exemplo, 10) produzem uma estimativa menos enviesada, mas exigem mais computação. A validação em 5 dobras é um equilíbrio comum. Para conjuntos de dados muito pequenos, a validação deixando uma amostra de fora usa N dobras, em que cada conjunto de teste contém uma amostra.

from sklearn.model_selection import LeaveOneOut, cross_val_score

loo = LeaveOneOut()
scores = cross_val_score(clf, X, y, cv=loo)
print("Mean:", scores.mean())

TimeSeriesSplit para dados temporais

Em séries temporais, nunca se deve treinar com dados do futuro. TimeSeriesSplit sempre usa dados passados para treinar e o bloco seguinte para testar, expandindo a janela de treinamento entre as dobras.

from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
    # train_idx always precedes test_idx in time
    print(len(train_idx), len(test_idx))

Por que a ordem importa em séries temporais

Embaralhar dados ordenados no tempo vaza informações futuras para o treinamento e infla as pontuações. O TimeSeriesSplit respeita a ordem cronológica, fazendo com que sua avaliação reflita condições reais de previsão.

cross_validate para várias métricas

cross_validate é semelhante a cross_val_score, mas retorna várias métricas de uma vez e pode incluir pontuações de treinamento e tempos de ajuste.

from sklearn.model_selection import cross_validate

results = cross_validate(
    clf, X, y, cv=5,
    scoring=["accuracy", "f1_macro", "roc_auc_ovr"],
    return_train_score=True,
)
print(results["test_accuracy"])
print(results["test_f1_macro"])

Lendo a saída de cross_validate

O resultado é um dicionário com chaves como test_<metric>, train_<metric>, fit_time e score_time. Comparar as pontuações de treino e teste ajuda a diagnosticar o sobreajuste.

import numpy as np

gap = results["train_accuracy"].mean() - results["test_accuracy"].mean()
print("Overfit gap:", gap)
print("Avg fit time:", np.mean(results["fit_time"]))

Validação cruzada e vazamento de dados

Sempre ajuste o pré-processamento (escalonamento, codificação) dentro do ciclo de CV, não antes dele. Use um Pipeline para que cada dobra faça o escalonamento usando apenas seus dados de treinamento, evitando vazamento.

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score

pipe = make_pipeline(StandardScaler(), SVC())
scores = cross_val_score(pipe, X, y, cv=5)

Escolhendo a estratégia adequada

Use StratifiedKFold para classificação, a validação em K dobras para regressão e TimeSeriesSplit para dados temporais. Coloque o pré-processamento em um fluxo de processamento e informe a média e o desvio padrão entre as dobras.

Verificação rápida

Teste seus conhecimentos sobre validação cruzada.

Recapitulação

Recapitulação: A validação cruzada calcula a média do desempenho em várias divisões. Use KFold para regressão, StratifiedKFold para classificação equilibrada e TimeSeriesSplit para dados temporais. cross_val_score fornece uma métrica; cross_validate fornece várias, além dos tempos. Sempre faça o pré-processamento dentro de um Pipeline para evitar vazamento.

Perguntas Frequentes

A aula “Estratégias de validação cruzada” é grátis?

Sim — o texto completo de “Estratégias de validação cruzada” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Learn AI with Python, atualize para CoddyKit PRO. O curso de Learn AI with Python inclui 4 aulas no total.

O que vou aprender em “Estratégias de validação cruzada”?

k-fold, k-fold estratificado, deixar um de fora e divisão de séries temporais — quando usar cada abordagem. Você pratica Learn AI with Python com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Learn AI with Python?

Nenhuma experiência prévia é necessária. Learn AI with Python no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Estratégias de validação cruzada”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Learn AI with Python?

Sim. Cada aula de Learn AI with Python inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Estratégias de validação cruzada
  2. Análise aprofundada de métricas de classificação
  3. Busca em grade e busca aleatória
  4. Otimização bayesiana com Optuna
← Voltar para Learn AI with Python