Validação cruzada aninhada para seleção de modelo

91

Como alguém pode usar validação cruzada aninhada para seleção de modelo ?

Pelo que li online, o CV aninhado funciona da seguinte maneira:

  • Existe o loop interno do CV, no qual podemos realizar uma pesquisa na grade (por exemplo, executando a dobra K para todos os modelos disponíveis, por exemplo, combinação de hiperparâmetros / recursos)
  • Existe o loop CV externo, onde medimos o desempenho do modelo que venceu na dobra interna, em uma dobra externa separada.

No final deste processo que acabam com modelos ( K sendo o número de pregas na espira externa). Esses modelos são os que venceram na pesquisa de grade no CV interno e provavelmente são diferentes (por exemplo, SVMs com kernels diferentes, treinados com recursos possivelmente diferentes, dependendo da pesquisa de grade).KK

Como escolho um modelo dessa saída? Parece-me que selecionar o melhor modelo dentre os modelos vencedores não seria uma comparação justa, pois cada modelo foi treinado e testado em diferentes partes do conjunto de dados.K

Então, como posso usar o CV aninhado para a seleção de modelos?

Também li tópicos discutindo como a seleção de modelos aninhados é útil para analisar o procedimento de aprendizado. Que tipos de análise / verificações posso fazer com as pontuações que recebo das dobras K externas?

Amelio Vazquez-Reina
fonte

Respostas:

76

Como escolho um modelo a partir desta saída [validação cruzada externa]?

Resposta curta: você não.

Trate a validação cruzada interna como parte do procedimento de ajuste do modelo. Isso significa que o ajuste, incluindo o ajuste dos hiperparâmetros (é aqui que a validação cruzada interna se esconde), é como qualquer outra rotina de eliminação de modelo.
A validação cruzada externa estima o desempenho desta abordagem de ajuste de modelo. Para isso, você usa as suposições usuais

  • kmodel.fitting.procedure
  • k

k

Então, como posso usar o CV aninhado para a seleção de modelos?

O CV interno faz a seleção.

Parece-me que selecionar o melhor modelo dentre os modelos K vencedores não seria uma comparação justa, pois cada modelo foi treinado e testado em diferentes partes do conjunto de dados.

k

  • Não tendo os mesmos dados de teste: como você deseja afirmar posteriormente que os resultados do teste são generalizados para dados nunca vistos, isso não pode fazer diferença.
  • Não tendo os mesmos dados de treinamento:
    • se os modelos são estáveis, isso não faz diferença: estável aqui significa que o modelo não muda (muito) se os dados de treinamento são "perturbados", substituindo alguns casos por outros casos.
    • se os modelos não são estáveis, três considerações são importantes:
      1. k
      2. k
      3. Se a instabilidade for um problema real, você não poderá extrapolar bem o desempenho para o modelo "real".

O que me leva à sua última pergunta:

Que tipos de análise / verificações posso fazer com as pontuações que recebo das dobras K externas?

  • verifique a estabilidade das previsões (use validação cruzada iterada / repetida)
  • verifique a estabilidade / variação dos hiperparâmetros otimizados.
    Por um lado, hiperparâmetros dispersos amplamente podem indicar que a otimização interna não funcionou. Por outro lado, isso pode permitir que você decida sobre os hiperparâmetros sem a etapa de otimização dispendiosa em situações semelhantes no futuro. Com o caro, não me refiro aos recursos computacionais, mas ao fato de que essas informações "custam" que podem ser melhor utilizadas para estimar os parâmetros "normais" do modelo.

  • verifique a diferença entre a estimativa interna e externa do modelo escolhido. Se houver uma grande diferença (o interior é muito otimista), existe o risco de a otimização interna não funcionar bem por causa do ajuste excessivo.


pergunta de update @ user99889: O que fazer se o CV externo encontrar instabilidade?

Primeiro de tudo, detectar no loop externo do CV que os modelos não produzem previsões estáveis ​​nesse aspecto não difere realmente de detectar que o erro de previsão é muito alto para a aplicação. Esse é um dos resultados possíveis da validação (ou verificação) do modelo, o que implica que o modelo que temos não é adequado a seu propósito.

No comentário ao @davips, eu estava pensando em lidar com a instabilidade no currículo interno - isto é, como parte do processo de otimização do modelo.

Mas você certamente está certo: se mudarmos nosso modelo com base nas descobertas do CV externo, mais uma rodada de testes independentes do modelo alterado será necessária.
No entanto, a instabilidade no CV externo também seria um sinal de que a otimização não foi bem configurada - portanto, encontrar instabilidade no CV externo implica que o CV interno não penalizou a instabilidade da maneira necessária - esse seria o meu principal ponto de vista. crítica em tal situação. Em outras palavras, por que a otimização permite / leva a modelos com excesso de ajuste?

No entanto, existe uma peculiaridade aqui: o IMHO pode desculpar a nova alteração do modelo "final" após uma análise cuidadosa das circunstâncias exatas : como detectamos o super ajuste, qualquer alteração proposta (menos df / mais restritiva ou agregação) ao modelo estar na direção de menos ajuste excessivo (ou pelo menos hiperparâmetros menos propensos a ajuste excessivo). O objetivo do teste independente é detectar o excesso de ajuste - o ajuste insuficiente pode ser detectado por dados que já foram usados ​​no processo de treinamento.

Portanto, se estivermos falando, digamos, sobre reduzir ainda mais o número de variáveis ​​latentes em um modelo PLS que sejam comparativamente benignas (se a alteração proposta for um tipo de modelo totalmente diferente, digamos PLS em vez de SVM, todas as apostas serão canceladas ), e eu ficaria ainda mais relaxado com isso se soubesse que estamos em um estágio intermediário de modelagem - afinal, se os modelos otimizados ainda são instáveis, não há dúvida de que são necessários mais casos. Além disso, em muitas situações, você precisará realizar estudos projetados para testar adequadamente vários aspectos do desempenho (por exemplo, generalização para dados adquiridos no futuro). Ainda assim, eu insistiria que o processo completo de modelagem precisaria ser relatado e que as implicações dessas alterações tardias precisariam ser discutidas cuidadosamente.

Além disso, a agregação incluindo uma estimativa de desempenho analógica e imediata do CV seria possível a partir dos resultados já disponíveis - que é o outro tipo de "pós-processamento" do modelo que eu estaria disposto a considerar benigno aqui. Mais uma vez, seria melhor se o estudo fosse elaborado desde o início para verificar se a agregação não oferece vantagem sobre predições individuais (que é outra maneira de dizer que os modelos individuais são estáveis).


Atualização (2019): quanto mais penso sobre essas situações, mais venho a favor da abordagem "validação cruzada aninhada aparentemente sem aninhamento" .

cbeleites
fonte
Na seleção de modelos errados, se o classificador for instável, devemos escolher aquele com desempenho mediano entre os melhores? Essa escolha seria análoga à sua sugestão para comparar o desempenho interno com o desempenho externo.
viyps 31/03
2
@ dips: Se os modelos forem instáveis, a otimização não funcionará (a instabilidade causa variação adicional). A escolha de um modelo com desempenho mediano (ou médio) não ajudará. Em vez disso, se os modelos forem instáveis, eu recomendaria optar por modelos mais restritivos (por exemplo, regularização mais forte) ou construir um conjunto de modelos (que é fundamentalmente diferente da seleção de um modelo).
Cbeleites 31/03
1
@ user99889: consulte a resposta atualizada.
Cbeleites
1
@ user99889: sim - mas não espere milagres por lá. Se a estabilidade é um problema ao treinar com 80% dos casos (k = 5), provavelmente ainda será um problema com k = 10 ou seja, 90% de n = 12,5% adicionais em comparação com os modelos substitutos de 80% / k = 5.
Cbeleites
1
@ cbeleites: uma hipotética relacionada. Suponha que eu decida pesquisar um espaço de parâmetro c: [1,2,3]. Eu executo CV aninhado em todo o conjunto de dados e considero o desempenho não tão bom. Portanto, expanda meu espaço de pesquisa para c: [0,5,1,1,5,2,2,5,3,3,5,4]. Eu fiz algo muito ruim? Parece que eu mudei essencialmente meu espaço de parâmetros (que faz parte do processo de modelagem) com base no conhecimento obtido dos dados de teste e, portanto, preciso avaliar em um conjunto de dados externo ao meu conjunto de dados atual? É um prazer fazer desta uma pergunta separada, se você acha que é melhor.
User
27

Além da excelente resposta dos cebeleites (+1), a idéia básica é que a validação cruzada seja usada para avaliar o desempenho de um método para ajustar um modelo, não o próprio modelo. Se você precisar executar a seleção do modelo, será necessário executá-lo independentemente em cada dobra do procedimento de validação cruzada, pois é parte integrante do procedimento de ajuste do modelo. Se você usar um procedimento de seleção de modelo com base na validação cruzada, isso significa que você acaba com a validação cruzada aninhada. É útil considerar o objetivo de cada validação cruzada - uma é para seleção de modelo e a outra para estimativa de desempenho.

Eu faria meu modelo final ajustando o modelo (incluindo seleção de modelo) a todo o conjunto de dados, depois de usar a validação cruzada aninhada para ter uma idéia do desempenho que eu poderia razoavelmente esperar obter desse modelo.

Dikran Marsupial
fonte
1
Por que você precisa get an idea of the performance?
viyps 31/03
1
@davips Geralmente, se um método estatístico for usado para algum propósito prático, os usuários frequentemente terão uma idéia de como ele funciona (por exemplo, teste de triagem médica). Além disso, se você estiver desenvolvendo um algoritmo de aprendizado de máquina, é útil ter uma estimativa imparcial de seu desempenho em comparação com os métodos concorrentes. É também um meio útil de validar se o método realmente funciona (que é invalidado se a validação cruzada for usada para selecionar parâmetros e estimar o desempenho).
Dikran Marsupial
5
Então, para decidir qual parâmetro usar no modelo final, você faria o loop interno uma vez? Portanto, se o loop interno tivesse 10 vezes mais validação, você seguraria 1/10 do trem de dados, cada modelo repetiria isso 10 vezes e depois escolheria o valor do parâmetro com o menor erro médio? Em seguida, treine novamente o modelo com esse valor de parâmetro em todo o conjunto de dados?
Emschorsch #
2
Sim, está correto. r
Dikran Marsupial
1
@FedericoTedeschi As validações cruzadas precisam ser aninhadas, em vez de apenas uma divisão diferente para obter um estimador de desempenho imparcial (consulte a seção 5.3 do meu artigo jmlr.csail.mit.edu/papers/volume11/cawley10a/cawley10a.pdf ) . Geralmente, só uso o LOOCV para seleção de modelos nos modelos em que ele pode ser calculado com eficiência e usaria bootstrapping / bagging para pequenos conjuntos de dados de modelos (com o erro OOB substituindo a validação cruzada externa).
Dikran Marsupial
7

Acho que ninguém realmente respondeu à primeira pergunta. Por "validação cruzada aninhada", acho que ele quis dizer combiná-la com o GridSearch. Normalmente, o GridSearch possui um CV incorporado e aceita um parâmetro de quantas dobras queremos testar. Combinando esses dois, acho uma boa prática, mas o modelo do GridSearch e do CrossValidation não é o seu modelo final. Você deve escolher os melhores parâmetros e treinar um novo modelo com todos os seus dados, eventualmente, ou até fazer uma validação cruzada aqui também em dados não vistos e, se o modelo for realmente bom, você treinará em todos os seus dados. Esse é o seu modelo final.

anselal
fonte
3
para esclarecer, no python scikit-learn, GridSearchCV(refit=True)na verdade reajusta um modelo nos dados COMPLETOS usando os melhores parâmetros, de modo que uma etapa extra não é necessária. Veja docs
Paul
Você está certo sobre a opção de reajustar. Eu estava apenas afirmando que era óbvio !!
Anselal 13/0518
"o modelo do GridSearch não é o seu modelo final". Mas o que quero dizer é que o modelo de pesquisa em grade com refit = True é o modelo final. Você quer dizer que você e eu estamos na mesma página? Mas ainda não vejo onde o aninhamento acontece na pesquisa em grade com o CV. Parece uma única camada de CV para mim (por exemplo, o CV de 5 vezes na pesquisa em grade é uma única camada de CV).
Paul
Estamos na mesma página sobre a reforma. Porém, com CV aninhado, queremos dizer que você cria outro loop CV fora do GridSearch, deixando alguns dados fora do treinamento e testando seu modelo final-final para ver se ele generaliza (faz boas previsões sobre dados desconhecidos)
anselal