Treinando com o conjunto de dados completo após a validação cruzada?

140

É sempre uma boa ideia treinar com o conjunto de dados completo após a validação cruzada ? Dito de outra forma, é correto treinar com todas as amostras no meu conjunto de dados e não poder verificar se esse acessório específico se encaixa demais ?


Alguns antecedentes sobre o problema:

Digamos que eu tenha uma família de modelos parametrizados por . Diga também que eu tenho um conjunto de N pontos de dados e que faço a seleção de modelos com validação cruzada k-fold para escolher o modelo que melhor generaliza os dados.αN

Para a seleção do modelo, eu posso fazer uma pesquisa (por exemplo, uma pesquisa em grade) em executando, por exemplo, a validação cruzada em dobra k para cada candidato. Em cada uma das dobras na validação cruzada, acabo com o modelo aprendido β α .α βα

O ponto da validação cruzada é que, para cada uma dessas dobras, posso verificar se o modelo aprendido estava super ajustado, testando-o em "dados invisíveis". Dependendo dos resultados, eu poderia escolher o modelo aprendido para os parâmetros α melhor que generalizasse melhor durante a validação cruzada na pesquisa em grade.βmelhorαmelhor

Agora, digamos que após a seleção do modelo , eu gostaria de usar todos os pontos no meu conjunto de dados e espero aprender um modelo melhor. Por isso eu poderia usar os parâmetros alfa b e s t correspondente ao modelo que eu escolhi durante a seleção do modelo e, em seguida, após o treinamento no conjunto de dados completo, eu faria um obter um novo aprendeu modelo β f u l l . O problema é que, se eu usar todos os pontos no meu conjunto de dados para treinamento, eu não posso verificar se este novo modelo aprendeu β f u l l causa overfittingNαbestβfvocêeueu βfvocêeueu em quaisquer dados invisíveis. Qual é a maneira correta de pensar sobre esse problema?

Amelio Vazquez-Reina
fonte
2
Quase uma cópia exata: stats.stackexchange.com/questions/52274 com muitas respostas válidas . Talvez esses threads devam ser mesclados, mas não sei em que direção. Ambos aceitaram respostas muito boas.
Ameba

Respostas:

111

A maneira de pensar na validação cruzada é estimar o desempenho obtido usando um método para construir um modelo, em vez de estimar o desempenho de um modelo.

Se você usar a validação cruzada para estimar os hiperparâmetros de um modelo (os s) e, em seguida, usar esses hiperparâmetros para ajustar um modelo ao conjunto de dados inteiro, tudo bem, desde que você reconheça que a estimativa de validação cruzada de é provável que o desempenho seja (possivelmente substancialmente) tendenciosamente otimista. Isso ocorre porque parte do modelo (os hiperparâmetros) foi selecionada para minimizar o desempenho da validação cruzada; portanto, se a estatística de validação cruzada tiver uma variação diferente de zero (e será), existe a possibilidade de ajuste excessivo o critério de seleção do modelo.α

Se você quiser escolher os hiperparâmetros e estimar o desempenho do modelo resultante, precisará executar uma validação cruzada aninhada, em que a validação cruzada externa é usada para avaliar o desempenho do modelo e, em cada dobra, a validação é usada para determinar os hiperparâmetros separadamente em cada dobra. Você constrói o modelo final usando a validação cruzada em todo o conjunto para escolher os hiperparâmetros e, em seguida, compila o classificador em todo o conjunto de dados usando os hiperparâmetros otimizados.

É claro que isso é computacionalmente caro, mas vale a pena, pois o viés introduzido pela estimativa inadequada de desempenho pode ser grande. Veja meu artigo

GC Cawley e NLC Talbot, excesso de ajuste na seleção de modelos e viés de seleção subsequente na avaliação de desempenho, Journal of Machine Learning Research, 2010. Research, vol. 11, pp. 2079-2107, julho de 2010. ( www , pdf )

No entanto, ainda é possível ter um ajuste excessivo na seleção do modelo (a validação cruzada aninhada apenas permite que você a teste). Um método que eu achei útil é adicionar um termo de regularização ao erro de validação cruzada que penaliza valores de hiperparâmetros que provavelmente resultam em modelos excessivamente complexos.

GC Cawley e NLC Talbot, Prevenindo o ajuste excessivo na seleção de modelos por meio da regularização bayesiana dos hiperparâmetros, Journal of Machine Learning Research, volume 8, páginas 841-861, abril de 2007. ( www , pdf )

Portanto, as respostas para sua pergunta são (i) sim, você deve usar o conjunto de dados completo para produzir seu modelo final, pois quanto mais dados usar, maior a probabilidade de generalizar bem, mas (ii) certifique-se de obter uma estimativa de desempenho imparcial via validação cruzada aninhada e, potencialmente, considere penalizar a estatística de validação cruzada para evitar ainda o excesso de ajuste na seleção do modelo.

Dikran Marsupial
fonte
3
+1: responde à pergunta: "Se você usar a validação cruzada para estimar os hiperparâmetros de um modelo (os αs) e, em seguida, usar esses hiperparâmetros para ajustar um modelo a todo o conjunto de dados, tudo bem ..."
Neil G
4
@soufanom, não, o uso de "experimentos iniciais" para fazer escolhas em relação ao modelo provavelmente resultará em ajuste excessivo e quase certamente introduzirá um viés otimista na análise de desempenho. A validação cruzada usada para análise de desempenho deve repetir TODAS as etapas usadas para ajustar o modelo independentemente em cada dobra. As experiências em meu artigo mostram que os modelos de kernel podem ser muito sensíveis a esse tipo de viés; portanto, é vital executar a seleção de modelos e a avaliação de desempenho com todo o rigor possível.
Dikran Marsupial
3
Para métodos do kernel, como o SVM, geralmente é possível executar a validação cruzada de exclusão única, quase sem custo computacional (consulte os documentos listados na minha resposta). Eu uso essa validação cruzada "virtual" de exclusão única para ajustar os hiperparâmetros, aninhados na validação cruzada k-fold para avaliação de desempenho. O custo é então bastante razoável. Na minha opinião, não é aceitável usar qualquer procedimento em que a avaliação de desempenho seja influenciada de alguma forma pelo ajuste dos hiperparâmetros. Vale a pena a despesa computacional para obter uma estimativa confiável.
Dikran Marsupial
2
@DikranMarsupial. Não entendo bem o terceiro parágrafo da sua resposta. Se eu aninhar a validação cruzada, receberei um conjunto diferente de hiperparâmetros para cada dobra do CV externo (ou seja, recebo um conjunto de hiperparâmetros executando o CV interno em uma grade de parâmetros). Como escolho o melhor conjunto de hiperparâmetros?
Amelio Vazquez-Reina
1
a validação cruzada é essencialmente um meio de estimar o desempenho de um método de ajuste de um modelo, e não do próprio método. Portanto, depois de executar a validação cruzada aninhada para obter a estimativa de desempenho, basta reconstruir o modelo final usando todo o conjunto de dados, usando o procedimento validado por você (que inclui a seleção dos hiperparâmetros).
Dikran Marsupial
23

Apenas para adicionar à resposta de @ mark999, o caretpacote de Max Kuhn (treinamento em classificação e regressão) é a fonte mais abrangente em R para a seleção de modelos com base na validação cruzada de autoinicialização ou no CV N-fold e em alguns outros esquemas.

Não desconsiderando a grandeza do rmspacote, mas caretpermite que você ajuste praticamente todos os métodos de aprendizado disponíveis no R, enquanto que validatesó funciona com rmsmétodos (eu acho).

O caretpacote é uma infraestrutura única para pré-processar dados, ajustar e avaliar qualquer modelo popular; portanto, é simples de usar para todos os métodos e fornece avaliação gráfica de muitas medidas de desempenho (algo que próximo ao problema de super ajuste pode influenciar a seleção do modelo consideravelmente como bem) sobre sua grade e importância variável.

Veja as vinhetas dos pacotes para começar (é muito simples de usar) Seleção de variáveis ​​de
pré-processamento de dados
com circunflexo
Construção de modelos com circunflexo
Importância variável

Você também pode visualizar o site de intercalação para obter mais informações sobre o pacote e exemplos específicos de implementação:
Site oficial de intercalação

Momo
fonte
Obrigado. Você sabe se, após a seleção do modelo (o que é feito chamando train), existe uma maneira de intercalar com o conjunto de dados completo?
Amelio Vazquez-Reina
Não tenho certeza se essa é uma boa ideia ou por que você deseja fazer isso, mas você pode apenas ajustar o modelo final retornado por trem ao conjunto de dados completo.
Momo
16

Acredito que Frank Harrell recomendaria a validação de inicialização em vez da validação cruzada. A validação de bootstrap permitiria validar o modelo ajustado no conjunto de dados completo e é mais estável que a validação cruzada. Você pode fazer isso em R usando validateo rmspacote Harrell .

Veja o livro "Estratégias de Modelagem de Regressão", de Harrell e / ou "Uma Introdução ao Bootstrap", de Efron e Tibshirani para obter mais informações.

mark999
fonte
9
Para omitir um próximo mito sobre "CV ruim", esse é um problema de terminologia - a "validação cruzada" de Harrell significa CV dobrável em N e "validação de autoinicialização" significa nova amostragem do CV. Obviamente, eu concordo que esse segundo sabor é mais estável e agradável, mas esse também é um tipo de validação cruzada.
1
mark999 ou @mbq, você se importaria em elaborar como o bootstrap permitiria validar um modelo ajustado no conjunto de dados completo?
Amelio Vazquez-Reina
1
@ user27915816 Bem, em princípio, de jeito nenhum; a idéia por trás da validação cruzada é que você testa se determinado método de treinamento está produzindo bons modelos de maneira confiável em conjuntos muito semelhantes ao final e, nesse caso, generaliza essa observação para o conjunto completo com suposições silenciosas de que nada de estranho acontecerá e esse método CV que você usou não é de alguma forma tendencioso. Obviamente, isso quase sempre é bom o suficiente, mas você nunca pode ter certeza de que o modelo construído em todos os dados que você possui não é super adaptado.
14

Eu acho que você tem um monte de perguntas diferentes aqui:

O problema é que, se eu usar todos os pontos do meu conjunto de dados para treinamento, não posso verificar se esse novo modelo aprendido é super-adequado!

O problema é que você pode usar (uma) etapa de validação apenas para uma coisa: para otimização de parâmetros, (x) ou para estimar o desempenho da generalização.

Portanto, se você fizer otimização de parâmetro por validação cruzada (ou qualquer outro tipo de determinação de parâmetro controlada por dados), precisará de amostras de teste independentes daquelas de treinamento e otimização. Dikran chama de validação cruzada aninhada, outro nome é validação cruzada dupla. Ou, é claro, um conjunto de testes independente.

Então, aqui está a pergunta para este post: É uma boa idéia treinar com o conjunto de dados completo após a validação cruzada do k-fold? Ou é melhor ficar com um dos modelos aprendidos em uma das divisões de validação cruzada para αbest?

O uso de um dos modelos de validação cruzada geralmente é pior do que o treinamento no conjunto completo (pelo menos se o desempenho da sua curva de aprendizado = f (nsamples) ainda estiver aumentando. Na prática, é: se não fosse, você provavelmente definiria além de um conjunto de testes independente.)

Se você observar uma grande variação entre os modelos de validação cruzada (com os mesmos parâmetros), seus modelos serão instáveis. Nesse caso, agregando os modelos podem ajudar e realmente ser melhor do que usar o um modelo treinado em toda a dados.

Atualização: essa agregação é a idéia por trás do empacotamento aplicado à reamostragem sem substituição (validação cruzada) em vez de reamostrar com substituição (validação de bootstrap / out-of-bootstrap).

Aqui está um artigo em que usamos essa técnica:
Beleites, C. & Salzer, R .: Avaliando e melhorando a estabilidade de modelos quimiométricos em situações de pequeno tamanho de amostra, Anal Bioanal Chem, 390, 1261-1271 (2008).
DOI: 10.1007 / s00216-007-1818-6

Talvez o mais importante seja: como posso treinar com todos os pontos do meu conjunto de dados e ainda combater o excesso de ajustes?

Por ser muito conservador com os graus de liberdade permitidos para o "melhor" modelo, ou seja, levando em consideração a incerteza (aleatória) nos resultados da validação cruzada da otimização. Se o df for realmente apropriado para os modelos de validação cruzada, é provável que eles não sejam muitos para o conjunto de treinamento maior . A armadilha é que a otimização de parâmetros é na verdade vários testes. Você precisa se proteger contra conjuntos de parâmetros acidentalmente bonitos.

cbeleites
fonte
...If you observe a large variation between the cross validation models (with the same parameters), then your models are unstable. In that case, aggregating the models can help...Você pode explicar isso um pouco mais? por exemplo, se eu estiver executando uma regressão logística em uma configuração validada cruzada de 10k e terminar com 10 conjuntos de coeficientes, você recomenda agregar as estimativas de coeficiente para formar um modelo final? Se sim, como isso pode ser feito, apenas tomando os meios?
Zhubarb 27/08/14
@ cbeleites você pode elaborar If the d.f. are actually appropriate for the cross validation models. No meu entender, você está argumentando que os conjuntos de treinamento / validação não são muito grandes quando comparados com o conjunto de dados completo, estou certo?
Jpcgandre
1
1k
1
Mais importante: os modelos substitutos de validação cruzada iterados compartilham o mesmo conjunto de hiperparâmetros. Ou seja, eles são equivalentes em tudo que você considera importante, exceto na seleção arbitrária de casos de treinamento e teste. A seleção de um modelo "bom", portanto, deve, de fato, selecionar principalmente uma boa combinação de conjunto de teste / treinamento - que é fundamentalmente o que geralmente não queremos: queremos uma escolha que esteja generalizando bem e, portanto, não apenas trabalhando em casos favoráveis. Desse ponto de vista, selecionar um modelo substituto a partir de uma validação cruzada "normal" não faz nenhum sentido para mim.
Cbeleites
1
1-1k
6

O que você faz não é uma validação cruzada, mas algum tipo de otimização estocástica.

A idéia do CV é simular um desempenho em dados invisíveis, executando várias rodadas de construção do modelo em um subconjunto de objetos e testando nos demais. Os resultados um tanto médios de todas as rodadas são a aproximação do desempenho de um modelo treinado em todo o conjunto .

No seu caso de seleção de modelo, você deve executar um CV completo para cada conjunto de parâmetros e, assim, obter uma aproximação de desempenho no conjunto completo para cada configuração, aparentemente a coisa que você deseja ter.

No entanto, observe que não há garantia de que o modelo com a melhor precisão aproximada seja o melhor - você pode validar cruzadamente todo o procedimento de seleção do modelo para verificar se existe algum intervalo no espaço de parâmetros para o qual as diferenças de a precisão do modelo não é significativa.


fonte
2
β
@ Amm Se sim, ok - como escrevi, o CV já testa o cenário de conjunto completo, você não pode dizer mais sem novos dados. Novamente, você pode, no máximo, fazer um CV aninhado para verificar se não há sobreajuste imposto pela própria seleção de modelo (se a seleção der uma melhoria muito boa ou se os dados forem ruidosos, o risco disso é muito grande).