Como escolher um modelo preditivo após a validação cruzada dobra k?

149

Eu estou querendo saber como escolher um modelo preditivo depois de fazer a validação cruzada K-fold.

Isso pode ser redigido de maneira desajeitada, então deixe-me explicar com mais detalhes: sempre que executo a validação cruzada K-fold, uso K subconjuntos dos dados de treinamento e termino com K modelos diferentes.

Gostaria de saber como escolher um dos modelos K, para que eu possa apresentá-lo a alguém e dizer "este é o melhor modelo que podemos produzir".

Posso escolher qualquer um dos modelos K? Ou existe algum tipo de prática recomendada, como escolher o modelo que obtém o erro mediano do teste?

Berk U.
fonte
2
Você pode encontrar as respostas na seguinte pergunta útil: stats.stackexchange.com/questions/2306/…
BGreene 15/13
Você precisará repetir 5 vezes o CV 100 vezes e calcular a média dos resultados para obter precisão suficiente. E a resposta de @bogdanovist está no local. Você pode obter a mesma precisão de estimativa de precisão no bootstrap com menos ajustes no modelo.
precisa
@ Frank Harrell, por que você diz que são necessárias 100 repetições (eu geralmente uso 10 repetições em 10 vezes), isso é uma regra de ouro, pois o OP não forneceu detalhes?
BGreene
2
Para CV de 10 vezes é melhor fazer repetições. Mais repetições serão necessárias com 5 vezes. Essas são regras práticas. Um único cv de 10 vezes receberá uma resposta instável, ou seja, repita as 10 divisões e você terá uma resposta diferente o suficiente para se preocupar. 50.
precisa
Quase uma cópia exata: stats.stackexchange.com/questions/11602 com muitas respostas válidas . Talvez esses threads devam ser mesclados, mas não sei em que direção. Ambos aceitaram respostas muito boas. Mas o outro é mais antigo e tem mais visualizações / upvotes, por isso pode fazer sentido mesclar esse com aquele.
Ameba

Respostas:

201

Eu acho que ainda está faltando algo em sua compreensão do objetivo da validação cruzada.

Vamos esclarecer algumas terminologias, geralmente quando dizemos 'um modelo' nos referimos a um método específico para descrever como alguns dados de entrada se relacionam com o que estamos tentando prever. Geralmente, não nos referimos a instâncias específicas desse método como modelos diferentes. Então você pode dizer 'Eu tenho um modelo de regressão linear', mas você não chamaria dois conjuntos diferentes de coeficientes treinados de modelos diferentes. Pelo menos não no contexto da seleção de modelos.

Portanto, quando você faz a validação cruzada com dobra K, está testando o quão bem seu modelo é treinado por alguns dados e, em seguida, prevê dados que não foram vistos. Usamos a validação cruzada para isso, porque se você treina usando todos os dados que possui, não resta nenhum para teste. Você pode fazer isso uma vez, digamos, usando 80% dos dados para treinar e 20% para testar, mas e se os 20% escolhidos para testar contiverem vários pontos que são particularmente fáceis (ou particularmente difíceis) prever? Não teremos a melhor estimativa possível da capacidade dos modelos de aprender e prever.

Queremos usar todos os dados. Portanto, para continuar o exemplo acima de uma divisão 80/20, faríamos uma validação cruzada 5 vezes treinando o modelo 5 vezes em 80% dos dados e testando em 20%. Garantimos que cada ponto de dados termine no teste de 20% definido exatamente uma vez. Portanto, usamos todos os pontos de dados que temos para contribuir para entender como nosso modelo executa a tarefa de aprender com alguns dados e prever alguns novos dados.

Mas o objetivo da validação cruzada não é apresentar nosso modelo final. Não usamos essas 5 instâncias do nosso modelo treinado para fazer uma previsão real. Para isso, queremos usar todos os dados que temos para criar o melhor modelo possível. O objetivo da validação cruzada é a verificação do modelo, não a construção do modelo.

Agora, digamos que temos dois modelos, digamos um modelo de regressão linear e uma rede neural. Como podemos dizer qual modelo é melhor? Podemos fazer a validação cruzada com dobra K e ver qual deles é melhor na previsão dos pontos de ajuste do teste. Porém, depois que usamos a validação cruzada para selecionar o modelo com melhor desempenho, treinamos esse modelo (seja a regressão linear ou a rede neural) em todos os dados. Não usamos as instâncias reais do modelo que treinamos durante a validação cruzada para o nosso modelo preditivo final.

Observe que existe uma técnica chamada agregação de autoinicialização (geralmente abreviada para 'ensacamento') que usa instâncias de modelo produzidas de maneira semelhante à validação cruzada para criar um modelo de conjunto, mas que é uma técnica avançada além do escopo da sua pergunta aqui.

Bogdanovist
fonte
8
Eu concordo totalmente com este ponto e pensei em usar todos os dados. Dito isto, se treinamos nosso modelo final usando todo o conjunto de dados, isso não resultaria em ajustes excessivos e, assim, sabotar previsões futuras?
Berk U. 15/03
19
Não! O excesso de ajuste tem a ver com a complexidade do modelo, não tem nada a ver com a quantidade de dados usados ​​para treinar o modelo. A complexidade do modelo tem a ver com o método que o modelo usa, não com os valores que seus parâmetros assumem. Por exemplo, se deve incluir x ^ 2 coeficientes e x coeficientes em um modelo de regressão.
precisa
17
@ Bogdanovist: Prefiro dizer que o excesso de ajuste tem a ver com poucos casos de treinamento para um modelo muito complexo. Portanto, isso também tem a ver com o número de casos de treinamento. Porém, ter mais casos de treinamento reduzirá o risco de sobreajuste (para complexidade constante do modelo).
Cbeleites
3
@ Bogdanovist For that we want to use all the data we have to come up with the best model possible.- Ao fazer uma pesquisa de grade com validação cruzada com dobras K, isso significa que você usaria os melhores parâmetros encontrados pela pesquisa de grade e ajustaria um modelo em todos os dados de treinamento e avaliaria o desempenho da generalização usando o conjunto de teste?
arun
4
@arun, se você usou a validação cruzada k-fold e selecionou o melhor modelo com os melhores parâmetros e hiperparâmetros, depois de ajustar o modelo final ao conjunto de treinamento, não será necessário verificar novamente o desempenho usando um Conjunto de teste. Isso ocorre porque você já verificou como o modelo com parâmetros especificados se comportava em dados invisíveis.
Sandeep S. Sandhu
29

Deixe-me mencionar alguns pontos além da resposta de Bogdanovist

k

Agora, existem algumas suposições nesse processo.


  • k

  • k
    Nk-1kkk

  • O número finito de casos significa que a medição de desempenho estará sujeita a um erro aleatório (variação) devido ao número finito de casos de teste. Essa fonte de variação é diferente (e, portanto, aumenta) a variação de instabilidade do modelo.

As diferenças no desempenho observado são devidas a essas duas fontes de variação.

A "seleção" em que você pensa é uma seleção de conjunto de dados: selecionar um dos modelos substitutos significa selecionar um subconjunto de amostras de treinamento e alegar que esse subconjunto de amostras de treinamento leva a um modelo superior. Embora isso possa ser verdade, geralmente a "superioridade" é espúria. De qualquer forma, como escolher o "melhor" dos modelos substitutos é uma otimização orientada por dados, você precisará validar (medir o desempenho) esse modelo escolhido com novos dados desconhecidos. O conjunto de testes nessa validação cruzada não é independente, pois foi usado para selecionar o modelo substituto.

Você pode olhar para o nosso artigo, trata-se de classificação em que as coisas geralmente são piores do que em regressão. No entanto, mostra como essas fontes de variação e viés se somam.
Beleites, C. e Neugebauer, U. e Bocklitz, T. e Krafft, C. e Popp, J .: Planejamento do tamanho da amostra para modelos de classificação. Anal Chim Acta, 2013, 760, 25-33.
DOI: 10.1016 / j.aca.2012.11.007
manuscrito aceito no arXiv: 1211.1323

cbeleites
fonte
Você e Bogdanovist estão em desacordo quando você diz picking "the best" of the surrogate models is a data-driven optimization, you'd need to validate (measure performance) this picked model with new unknown data. The test set within this cross validation is not independent as it was used to select the surrogate model.e ele diz But once we have used cross-validation to select the better performing model, we train that model (whether it be the linear regression or the neural network) on all the data.Isso é muito comum e é crucial que uma abordagem padronizada é especificado
jpcgandre
Especialmente para pequenos conjuntos de dados em que talvez não seja possível excluir dados do CV, mas os riscos de sobreajustar seu modelo também são altos! São necessárias referências para esclarecer esse problema.
precisa saber é o seguinte
5
@jpcgandre: Não vejo nenhum desacordo. Bogdanovist explica como realmente calcular o modelo de escolha a partir dos hiperparâmetros selecionados via validação cruzada, e acrescentei que após essa seleção, o modelo precisa passar por outro nível (externo) de validação independente. Em outras palavras, por exemplo, um projeto de validação aninhada: loop de validação interna para seleção de hiperparâmetros, loop externo para testar os modelos selecionados (se houver casos suficientes, você também poderá optar por um conjunto de testes independente).
Cbeleites
5
A configuração de validação interna / externa é para validação cruzada conhecida como validação cruzada dupla ou aninhada, eu já vi isso chamado validação de modelo cruzado ( dx.doi.org/10.1016/j.chemolab.2006.04.021 ). Com um conjunto de testes independente, ele corresponde à divisão em três conjuntos: validação / teste de trem / (otimização) / = validação final). Se você tem tão poucos casos que não pode deixar de fora dados para um currículo de segundo nível, eu diria que você deve corrigir seus hiperparâmetros por outros meios, em vez de tentar otimizar selecionando um dos conjuntos de hiperparâmetros.
Cbeleites
@ cbeleites Eu tenho uma pergunta. Então, para obter os parâmetros finais do modelo, você pegaria a média dos hiperparâmetros de cada dobra externa e treinaria novamente todo o conjunto de dados usando esse hiperparâmetro médio? Ou fazer pesquisa por hiperparâmetro em um CV regular e, em seguida, confirmar a estabilidade desse método usando CV aninhado repetido também funcionaria?
Michelle
11

Achei este excelente artigo Como Treinar um Modelo Final de Aprendizado de Máquina muito útil para esclarecer todas as confusões que tenho sobre o uso de CV no aprendizado de máquina.

Basicamente, usamos CV (por exemplo, divisão 80/20, dobra em k, etc.) para estimar o desempenho de todo o procedimento (incluindo a engenharia de dados, a escolha do modelo (por exemplo, algoritmo) e hiper parâmetros, etc.) no futuro não visto. dados. E uma vez que você tenha escolhido o "procedimento" vencedor, os modelos da CV cumpriram seu objetivo e agora podem ser descartados. Você usa o mesmo "procedimento" vencedor e treina seu modelo final usando todo o conjunto de dados.

Patrick Ng
fonte
1

É uma pergunta muito interessante. Para deixar claro, devemos entender a diferença entre modelo e avaliação de modelo. Usamos o conjunto de treinamento completo para construir um modelo e esperamos que esse modelo seja finalmente usado.

A avaliação cruzada K fold criaria modelos K, mas todos seriam descartados. Os modelos K são usados ​​apenas para avaliação. e Apenas produziu métricas para informar como esse modelo se ajusta aos seus dados.

Por exemplo, você escolhe o item LinearRegression algo e executa duas operações no mesmo conjunto de treinamento: um com validação cruzada de 10 vezes e outro com 20 vezes. o modelo de regressão (ou classificador) deve ser o mesmo, mas o coeficiente de correlação e o erro quadrático relativo da raiz são diferentes.

Abaixo estão duas execuções para validação cruzada de 10 e 20 vezes com weka

1ª corrida com 10 vezes

=== Run information ===
Test mode:    10-fold cross-validation
...
=== Classifier model (full training set) ===


Linear Regression Model  <---- This model is the same

Date = 844769960.1903 * passenger_numbers -711510446549.7296

Time taken to build model: 0 seconds

=== Cross-validation ===  <---- Hereafter produced different metrics
=== Summary ===

Correlation coefficient                  0.9206
Mean absolute error                35151281151.9807
Root mean squared error            42707499176.2097
Relative absolute error                 37.0147 %
Root relative squared error             38.9596 %
Total Number of Instances              144     

2ª corrida com 20 vezes

=== Run information ===
...
Test mode:    20-fold cross-validation

=== Classifier model (full training set) ===


Linear Regression Model   <---- This model is the same

Date = 844769960.1903 * passenger_numbers -711510446549.7296

Time taken to build model: 0 seconds

=== Cross-validation ===  <---- Hereafter produced different metrics
=== Summary ===

Correlation coefficient                  0.9203
Mean absolute error                35093728104.8746
Root mean squared error            42790545071.8199
Relative absolute error                 36.9394 %
Root relative squared error             39.0096 %
Total Number of Instances              144     
Canhua Li
fonte
0

Não tenho certeza de que a discussão acima esteja totalmente correta. Na validação cruzada, podemos dividir os dados em Treinamento e Teste para cada execução. Usando apenas os dados de treinamento, é necessário ajustar o modelo e escolher os parâmetros de ajuste em cada classe de modelos que está sendo considerada. Por exemplo, nas redes neurais, os parâmetros de ajuste são o número de neurônios e as opções para a função de ativação. Para fazer isso, valida-se apenas os dados de treinamento .

Depois que o melhor modelo de cada classe é encontrado, o modelo de melhor ajuste é avaliado usando os dados de teste. O loop de validação cruzada "externa" pode ser usado para fornecer uma estimativa melhor do desempenho dos dados de teste, bem como uma estimativa da variabilidade. Uma discussão pode comparar o desempenho do teste para diferentes classes, como Neural Nets vs. SVM. Uma classe de modelo é escolhida, com o tamanho do modelo fixo e agora todos os dados são usados ​​para aprender o melhor modelo.

Agora, se como parte do seu algoritmo de aprendizado de máquina você deseja selecionar constantemente a melhor classe de modelo (digamos todas as semanas), mesmo essa opção precisa ser avaliada nos dados de treinamento! A medição dos dados de teste não pode ser usada para julgar a escolha da classe do modelo se for uma opção dinâmica.

DataExplorer
fonte
0

Por que usamos a validação cruzada k-fold?

A validação cruzada é um método para estimar a habilidade de um método em dados invisíveis. Como usar uma divisão de teste de trem.

A validação cruzada cria e avalia sistematicamente vários modelos em vários subconjuntos do conjunto de dados. Isso, por sua vez, fornece uma população de medidas de desempenho .

  • Podemos calcular a média dessas medidas para ter uma idéia do desempenho médio do procedimento.
  • Podemos calcular o desvio padrão dessas medidas para ter uma idéia de quanto a habilidade do procedimento deve variar na prática.

Isso também é útil para fornecer uma comparação mais diferenciada de um procedimento para outro quando você está tentando escolher quais algoritmos e procedimentos de preparação de dados usar.

Além disso, essas informações são inestimáveis, pois você pode usar a média e a dispersão para fornecer um intervalo de confiança no desempenho esperado em um procedimento de aprendizado de máquina na prática.

referência

Saeed
fonte