A questão está sob uma suposição errada. Muitas pessoas fazem o que você diz que "não podem" fazer.
De fato, a implementação da pesquisa de grade no pacote sklearn amplamente implantado faz exatamente isso. A menos que refit=False
ele treine novamente o modelo final usando todos os dados.
Para alguns hiperparâmetros, acho que isso pode não ser muito desejável, porque eles são relativos ao volume de dados. Por exemplo, considere a min_samples_leaf
tática de pré-poda para uma árvore de decisão . Se você tiver mais dados, a pré-poda pode não ter o desempenho desejado.
Porém, novamente, a maioria das pessoas treina de fato usando os dados completos após a validação cruzada, para que eles acabem com o melhor modelo possível.
Adendo: @NeilSlater diz abaixo que algumas pessoas realizam hold-out em cima do CV. Em outras palavras, eles fazem uma divisão de teste de trem e, em seguida, realizam a seleção do modelo no treinamento. Segundo ele, eles treinam novamente usando o conjunto de treinamento original dividido, mas não o conjunto de testes. O conjunto de testes é então usado para realizar uma estimativa final do modelo. Pessoalmente, vejo três falhas nisso: (a) não resolve o problema que mencionei, com alguns hiperparâmetros dependentes do volume de treinamento, pois você está treinando de qualquer maneira; (b) ao testar muitos modelos, prefiro mais sofisticados métodos como validação cruzada aninhada para que nenhum dado seja desperdiçado e (c) a retenção é um método terrível para inferir como um modelo será generalizado quando você tiver poucos dados.