Por dados completos, quero dizer treinar + testar + validação
Depois de corrigir meu hiperparâmetro usando os dados de validação e escolher o modelo usando os dados de teste, não será melhor ter um modelo treinado em todos os dados para que os parâmetros sejam melhor treinados do que ter o modelo treinado apenas dados de trem
machine-learning
Apoorva Abhishekh
fonte
fonte
Respostas:
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.
fonte
refit
opção da função GridSearchCV. Ele não se ajusta para incluir dados de teste retidos (nem sequer consegue ver esses dados).Sim você pode.
Como os dados de teste devem vir de distribuição semelhante para treinar dados, você não quebrará seu modelo. Se você treinou o modelo adequadamente, não notará nenhuma alteração significativa (exceto uma métrica de precisão melhor nos dados de teste / validação anteriores).
Mas é raro que os dados de teste sejam precisamente da mesma distribuição que os dados de trem, portanto, no cenário real de caso de aplicativo, você pode obter uma melhor generalização do seu modelo.
fonte
A resposta para esta pergunta depende do algoritmo de treinamento (tecnologia) que você usa. Por exemplo, eu vi algumas abordagens na classificação de conjuntos, nas quais conjuntos de treinamento e validação (mas não testes) são combinados no final. É muito importante saber que mesmo a validação é usada principalmente para decidir os hiper parâmetros, alguns desses parâmetros podem ser uma função dos dados usados para o treinamento. Por exemplo, na validação DNN costumava saber quando parar, porque o ajuste excessivo pode ocorrer como resultado do ajuste contínuo dos parâmetros (pesos) da rede, precisamos de uma maneira de saber quando parar. Sem o conjunto de validação, você estará andando cegamente no processo de treinamento. Por outro lado, se você usar exatamente o mesmo número de iterações especificado anteriormente, existe um grande prob que você não obterá com essas amostras adicionais. O conjunto de testes não deve ser tocado, como indicado acima, sem o conjunto de testes, você não terá um método para avaliar seu modelo. Isso é jogo, você NÃO PODE entregar nenhum modelo ou solução sem a estimativa de sua precisão na verdadeira distribuição de dados (representada pelos dados de teste).
fonte