Nesta página da Wikipedia , na subseção para validação cruzada com dobras K, diz "Na validação cruzada com dobras k, a amostra original é dividida aleatoriamente em k subamostras de tamanho igual. Das k subamostras, uma única subamostra é retida como dados de validação para testando o modelo, e as subamostras k - 1 restantes são usadas como dados de treinamento ". Os dados de teste não estão na imagem.
Enquanto em um livro eu li o autor indica claramente
- Os dados completos são divididos em três conjuntos: conjunto de treinamento, conjunto de teste e conjunto de validação (ou subamostras no idioma da Wikipédia).
- Das subamostras k, uma subamostra é retida como dados de validação, uma outra subamostra é retida como dados de teste e as subamostras k-2 são usadas como dados de treinamento.
Que é verdade?
Respostas:
Ambos estão corretos em seu próprio contexto. Eles estão descrevendo duas maneiras diferentes de seleção de modelos em diferentes situações.
Em geral, quando você está selecionando e testando modelos, seus dados são divididos em três partes: conjunto de treinamento, conjunto de validação e conjunto de testes. Você usa seu conjunto de treinamento para treinar modelos diferentes, estimar o desempenho em seu conjunto de validação, depois selecionar o modelo com desempenho ideal e testá-lo em seu conjunto de testes.
Por outro lado, se você estiver usando a validação cruzada de dobra K para estimar o desempenho de um modelo, seus dados serão divididos em dobras K, você percorrerá as dobras K e cada vez que usar uma dobra como teste (ou validação) ajuste e use as dobras restantes (K-1) como conjunto de treinamento. Em seguida, você calcula a média de todas as dobras para obter o desempenho estimado do teste do seu modelo. É a isso que a página da Wikipedia está se referindo.
Mas lembre-se de que isso é para testar um modelo específico. Se você possui vários modelos candidatos e deseja fazer a seleção de modelos também, é necessário selecionar um modelo apenas com seu conjunto de treinamento para evitar essa sutil falácia da lógica circular.. Assim, você divide ainda mais os 'dados de treinamento' das dobras (K-1) em duas partes, uma para treinamento e outra para validação. Isso significa que você faz uma 'validação cruzada' primeiro para selecionar o modelo ideal dentro das dobras (K-1) e depois testa esse modelo ideal na sua dobra de teste. Em outras palavras, você está realizando uma validação cruzada de dois níveis, uma é a validação cruzada K-fold em geral e, em cada loop de validação cruzada, há uma validação cruzada extra (K-1) para seleção de modelo. Em seguida, você tem o que declarou em sua pergunta: 'Das k subamostras, uma subamostra é retida como dados de validação, outra subamostra é retida como dados de teste e k-2 subamostras são usadas como dados de treinamento'.
fonte
Aqui, estou re-declarando o que obtive da resposta de @Yuanning e dos comentários de @cbeleites na forma de pseudocódigo. Isso pode ser útil para pessoas como eu.
Para medir o desempenho de um modelo determinado, precisamos apenas de conjuntos de treinamento e teste:
Mas se precisarmos fazer a seleção do modelo, devemos fazer o seguinte:
fonte
k_performance
destinado a ser o rótulo para uma específica dobra entre o total de número dek_select
dobras de desempenho? Suponho que isso vá para sua pergunta sobre "Como selecionar test_set". Eu também gostaria de receber feedback específico sobre isso. Eu já vi essa validação cruzada 'aninhada' para a seleção de modelos, mas nunca descrita em detalhes.