R / circunflexo: conjuntos de trem e teste x validação cruzada?


9

Talvez essa seja uma pergunta tola, mas, ao gerar um modelo com sinal de intercalação e usar algo como LOOCVou (ainda mais direto ao ponto) LGOCV, qual é o benefício de dividir dados em conjuntos de trens e testes, se é basicamente isso que a etapa de validação cruzada faz assim mesmo?

Eu li algumas das perguntas relacionadas e elas sugeriram que alguns dos métodos de validação cruzada (por exemplo, o que é descrito aqui no site de intercalação ) são para fins de seleção de recursos . Mas, no meu caso, estou usando randomForest( method = "rf") e kernlab( method = svmRadial), que não estão listados no grupo que tenta eliminar os preditores.

Portanto, minha pergunta é se eu uso algo como cross_val <- trainControl(method = "LGOCV", p = 0.8), não é o mesmo que treinar 80% dos meus dados, testar o modelo resultante nos 20% restantes e fazer isso repetidamente para ter uma idéia de quão bem o modelo está funcionando?

Em caso afirmativo, é necessário dividir meus dados em conjuntos de trem / teste?

PS: Em parte pergunto enquanto estou conduzindo modelos em protótipos do DOE gerados empiricamente (pense em bens duros onde ajustamos as entradas e depois usamos métodos de teste para medir vários atributos sobre o protótipo).

Como tal, não tenho um grande conjunto de dados com muitos níveis de preditores sobrepostos para modelar - geralmente executamos uma avaliação em cada ponto de interesse do DOE, pois a geração de dados é cara nesse caso. Assim, eu gostaria de usar todos os dados possíveis para um modelo preciso, mas queria verificar aqui que não estou perdendo algo óbvio e criando um modelo ruim por não dividir as coisas.


Edit: Em resposta à pergunta do @ topepo, estou modelando atributos medidos fisicamente de um composto com base no ajuste das entradas químicas da fórmula. Não posso discutir minha aplicação real, mas vou fazer um exemplo com base na formulação de tinta látex interior. Estou realizando experimentos projetados em que misturamos 4-5 produtos químicos, talvez brinque com% de sólidos e uma quantidade de tempo para aquecer a solução de polímero para ajustar o grau de polimerização.

Poderemos então medir reologia, peso molecular, dureza do revestimento de tinta, resistência à água, etc.

Temos réplicas decentes de várias variáveis, mas poucas réplicas verdadeiras no sentido de que todos os níveis de DOE eram exatamente iguais. O conjunto total de dados é de ~ 80 observações e talvez 4-5 sejam repetições exatas. Realizamos 15 testes diferentes, e talvez 5 a 6 deles foram feitos para cada observação. Algumas das respostas estão presentes para 25-50% dos dados.

A partir daqui, gostaríamos de modelar os efeitos de nossos 7 preditores nas propriedades de saída e, em seguida, otimizar para direcionar novos espaços de design com maior probabilidade de fornecer as propriedades desejadas.

(Daí minha pergunta AQUI . Depois de ter um modelo treinado, seria bom fazer o "inverso" e alimentar as respostas desejadas para obter a melhor estimativa dos possíveis níveis de entrada para tentar a seguir).


Conjunto de validação e conjunto de teste são duas coisas diferentes! Veja stats.stackexchange.com/questions/19048/… e en.wikipedia.org/wiki/Test_set
sashkello

@sashkello Obrigado por isso. Provavelmente, isso pode ser encerrado como duplicado e, de alguma maneira, eu perdi completamente essa pergunta. Um bit que faltava é: Se eu treino data_set1, com o que considero a etapa executada pela LGOCVvalidação cruzada? Pela minha leitura, estou assumindo que 1) caretrepete os parâmetros de ajuste data_set1e, em seguida, 2) mantém esses parâmetros fixos e 3) cria um "submodelo" usando parâmetros do nº 1 para cada p = 0.8amostra data_set1e testa previsões nos 0,2 restantes para medir a precisão . Esse é um resumo razoável?
Hendy 23/07

Um outro ponto que falta: deixar de fora um conjunto de testes ajuda a precisão do modelo? Parece que apenas fornece um conjunto imparcial para testes futuros. Se os dados são limitados e não há muitos pontos de design sobrepostos, não é melhor treinar com o conjunto completo e confiar na validação cruzada para obter uma estimativa de precisão?
Hendy 23/07

Com uma melhor estratégia de pesquisa, esta é uma ferramenta útil: stats.stackexchange.com/questions/9357/… . Particularmente este "Eu acho que um fator limitante aqui é a quantidade de dados que você possui. Na maioria das vezes, nem queremos dividir os dados em partições fixas, daí o CV". . Eu acho que isso fica a minha pergunta (o que provavelmente é específica à natureza limitada dos meus dados (apenas 80 observações) Parece que um voto para não rachar nesses casos?
Hendy

Respostas:


7

Meus pensamentos gerais:

Portanto, ao avaliar modelos diferentes, você pode ajustá-los, experimentar diferentes tipos de pré-processamento, etc. até encontrar o que você acha que é um bom modelo. A reamostragem pode ajudar a guiá-lo na direção certa durante esse processo.

No entanto, ainda existe a chance de um ajuste excessivo e as chances disso acontecer são grandemente influenciadas pela quantidade de dados (e preditores) que você possui. Se você tiver um pouco de dados, existem algumas maneiras de pensar sobre isso:

  • Use todos os dados para treinamento, pois cada ponto de dados contribui significativamente para o desempenho do modelo.
  • Separe um pequeno conjunto de testes como uma verificação final para erros grosseiros devido ao ajuste excessivo. As chances de adaptação excessiva com um tamanho pequeno de amostras não são pequenas e aumentam com o número de amostras.

Eu caio no segundo acampamento, mas o primeiro não está errado.

Se você tem uma tonelada de dados, isso realmente não importa muito (a menos que você tenha uma pequena taxa de eventos).

Para voce:

Você tem um DOE. O tipo de design ajudaria a responder à pergunta. Você está tentando interpolar entre pontos de design ou prever pontos de design que não foram testados até agora?

Você tem uma réplica. Eu caí como se uma floresta aleatória estivesse acertando um prego com uma marreta e poderia resultar em excesso de ajuste. Eu tentaria algo mais suave como uma rede neural SVM ou (gasp).

Máx.


Eu adicionei uma atualização para você acima. Eu tive curvas muito boas (acho que isso é subjetivo) com method = "svmRadial". Espero avaliar alguns outros, inclusive method = neuralnet, embora em tentativas anteriores tenha encontrado a rede neural muito sensível ao `set.seed (). Em resumo, estamos tentando 1) entender melhor a relação entre entradas / respostas múltiplas e 2) fazer melhores suposições no espaço de design mais provável para produzir as propriedades desejadas, para que possamos executar DOEs mais novos e mais focados do que um mais típico abordagem expansiva / espingarda em termos de níveis mínimo / máximo de entrada para tentar.
21413 Hendy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.