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/tune em todas as linhas; reporte a média externa do ml/nested_cv como 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 da externa, a busca está escolhendo ruído — reduza o espaço ou as tentativas.

  • Os folds externos e internos seguem a mesma estratégia (aleatoria, grupo ou temporal) e supõem a mesma estrutura de dependência do ml/tune.

    Se falhar: Com tempo ou grupos, escolha estrategia = "temporal" (com ordem) ou "grupo" (com grupo).

  • 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_externos só 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 no ml/tune; em cada um, tr_ml_tune completo 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)

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

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

Ver a bibliografia completa do trama