Coleção aprendizado
Validação cruzada aninhada
Estima o desempenho do ajuste com busca de hiperparâmetros sem reaproveitar as linhas que escolheram o vencedor.
O que o bloco faz
Cada fold externo roda um ml/tune completo só no seu treino e mede o vencedor na sua validação, que a busca nunca viu. A média da coluna externa estima o desempenho do procedimento inteiro — busca incluída.
Antes de continuar
Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.
- Treino e teste
- Dividir os dados em uma parte para ajustar o modelo (treino) e outra, guardada, para medir o desempenho (teste). O teste só é honesto se o modelo nunca o viu durante o ajuste.
- Sobreajuste
- Quando o modelo aprende o ruído dos dados de treino junto com o padrão, e por isso acerta muito no treino e pouco em dados novos. Modelos mais flexíveis correm mais esse risco.
- Validação cruzada
- Repetir a divisão treino/teste várias vezes, cada vez deixando uma parte diferente dos dados de fora, e fazer a média do desempenho. Dá uma estimativa mais estável do erro em dados novos do que uma única divisão.
- Hiperparâmetro
- Uma configuração do método escolhida antes do ajuste, como a profundidade de uma árvore ou o número de árvores de uma floresta. Costuma ser escolhida por validação cruzada, nunca olhando o conjunto de teste.
- Matriz de confusão
- A tabela que cruza a classe verdadeira com a classe prevista. Dela saem acurácia, sensibilidade, especificidade e precisão, que podem contar histórias diferentes quando as classes têm tamanhos muito diferentes.
Quando usar
Quando não há linhas para um teste separado, ou quando se quer saber quanto da média do ml/tune é sorte da seleção. A média dos folds do vencedor é otimista porque ele foi o melhor entre muitas tentativas (Varma & Simon 2006); em ruído puro, com 40 linhas e SVM com 10 tentativas, a média do ml/tune deu 0,60 de acurácia e a aninhada 0,52 (acaso = 0,5), em 12 réplicas semeadas do teste do bloco.
Pressupostos
A estimativa é do procedimento de ajuste inteiro (busca + reajuste), não de um modelo final específico: cada fold externo escolhe hiperparâmetros próprios, e o vencedor pode mudar de fold para fold.
Se falhar: Para o modelo a usar, rode o
ml/tuneem todas as linhas; reporte a médiaexternadoml/nested_cvcomo o desempenho esperado desse procedimento.Só a coluna `externa` é honesta: mede linhas que a busca nunca viu. A
internaé a média dos folds do vencedor dentro da busca e sai otimista (Varma & Simon 2006); a diferença entre elas mostra o otimismo da seleção.Se falhar: Não reporte a
interna; se ela ficar muito acima daexterna, a busca está escolhendo ruído — reduza o espaço ou as tentativas.Os folds externos e internos seguem a mesma estratégia (
aleatoria,grupooutemporal) e supõem a mesma estrutura de dependência doml/tune.Se falhar: Com tempo ou grupos, escolha
estrategia = "temporal"(comordem) ou"grupo"(comgrupo).Com poucas linhas, cada busca interna vê só uma parte do treino: a estimativa externa é pessimista e variável (poucas linhas por fold), e o custo é folds externos × tentativas × folds internos ajustes.
Se falhar: Leia a variação entre folds; aumente
folds_externossó se houver linhas para isso.O resultado depende da semente: outra semente muda a divisão, os folds ou o próprio ajuste, e com poucos dados a diferença pode ser grande.
Se falhar: Repita com outras sementes e leia a variação; não escolha a semente pelo resultado.
Configuração
Os mesmos parâmetros do ml/tune (modelo, metrica, tentativas, amplitude, estrategia, ordem, grupo, seed), mais folds_externos; folds são as partições internas de cada busca. O custo é folds externos × tentativas × folds internos ajustes. A estratégia grupo_estratificado também vale aqui; folds externos de validação com uma classe só geram aviso e a nota no atributo nota.
Exemplo
d <- trama.ml::tr_ml_example("iris_binaria")
trama.ml::tr_ml_nested_cv(d, resposta = "Species", tentativas = 5, folds_externos = 5, folds = 3)
Como interpretar
Uma linha por fold externo e a linha media. No exemplo, a interna média é 0,904 e a externa 0,890 (macro F1): a diferença é o otimismo da seleção. Reporte a externa; o modelo a usar sai de um ml/tune em todas as linhas.
Teste recusado
A saída teste do ml/split é recusada aqui (tr_ml_error_test_leak): ajustar nela treinaria no teste. Ligue a saída treino; o teste vai só ao ml/predict.
Implementação
trama.ml::tr_ml_nested_cv()versão 0.5.7Implementação própria: folds externos formados como noml/tune; em cada um,tr_ml_tunecompleto só no treino externo e a métrica do vencedor na validação externa.
No código O bloco chama trama.ml::tr_ml_nested_cv(), em trama.ml/R/tuning.R:286.
A conta é implementada pelo próprio trama, sem um pacote R de referência por trás.
Outras funções de pacotes que o bloco usa (15)
stats::setNames(fold_de, grupos)stats::setNames(sample(rep(seq_len(k), length.out = length(grupos))), grupos)par(unname(which(id[g] == i)))stats::runif(1L, log(z[[1]]), log(z[[2]]))stats::runif(1L, z[[1]], z[[2]])stats::setNames(out, names(space))stats::predict(modelo$ajuste, x, type = "response")stats::predict(modelo$ajuste, x, type = "prob")stats::predict(modelo$ajuste, new_data = x, type = "prob")stats::predict(modelo$ajuste, new_data = x)stats::predict(modelo$ajuste, data = x)stats::predict(modelo$ajuste, x, probability = cls)stats::predict(modelo$ajuste, data.matrix(x))stats::setNames(as.list(c(valores, rep(NA_real_, folds - length(valores)))), paste0("fold_", seq_len(folds)))stats::sd(valores)
Referências
Teoria
- Varma, S.; Simon, R. (2006). Bias in error estimation when using cross-validation for model selection. BMC Bioinformatics, 7, 91. doi:10.1186/1471-2105-7-91
Livro-texto
- James, G.; Witten, D.; Hastie, T.; Tibshirani, R. (2021). An Introduction to Statistical Learning: with Applications in R. 2. ed. New York: Springer. doi:10.1007/978-1-0716-1418-1
- Kuhn, M.; Johnson, K. (2013). Applied Predictive Modeling. New York: Springer. doi:10.1007/978-1-4614-6849-3
Complementar
- Cawley, G. C.; Talbot, N. L. C. (2010). On over-fitting in model selection and subsequent selection bias in performance evaluation. Journal of Machine Learning Research, 11, 2079-2107. https://www.jmlr.org/papers/v11/cawley10a.html