Qual é a diferença entre trem, validação e conjunto de testes em redes neurais?

155

Estou usando esta biblioteca para implementar um agente de aprendizado.

Eu gerei os casos de treinamento, mas não sei ao certo quais são os conjuntos de validação e teste.
O professor diz:

70% devem ser casos de trem, 10% serão casos de teste e os demais 20% devem ser casos de validação.

editar

Eu tenho esse código para treinamento, mas não tenho idéia de quando parar o treinamento.

  def train(self, train, validation, N=0.3, M=0.1):
    # N: learning rate
    # M: momentum factor
    accuracy = list()
    while(True):
        error = 0.0
        for p in train:
            input, target = p
            self.update(input)
            error = error + self.backPropagate(target, N, M)
        print "validation"
        total = 0
        for p in validation:
            input, target = p
            output = self.update(input)
            total += sum([abs(target - output) for target, output in zip(target, output)]) #calculates sum of absolute diference between target and output

        accuracy.append(total)
        print min(accuracy)
        print sum(accuracy[-5:])/5
        #if i % 100 == 0:
        print 'error %-14f' % error
        if ? < ?:
            break

editar

Posso obter um erro médio de 0,2 com dados de validação, depois de talvez 20 iterações de treinamento, que devem ser 80%?

erro médio = soma da diferença absoluta entre o destino e a saída da validação, considerando a entrada / tamanho dos dados de validação.

1
        avg error 0.520395 
        validation
        0.246937882684
2
        avg error 0.272367   
        validation
        0.228832420879
3
        avg error 0.249578    
        validation
        0.216253590304
        ...
22
        avg error 0.227753
        validation
        0.200239244714
23
        avg error 0.227905    
        validation
        0.199875013416
Daniel
fonte
1
"... isso deve ser 80%?" Não, erro médio e porcentagem correta são duas coisas diferentes. Suponha que seu valor-alvo seja 5,0 e seu neurônio retorne 4,8 (ou seja, um erro de 0,2). Dependendo dos dados, um erro de 0,2 pode ser aceitável; portanto, se o erro for pequeno o suficiente, você poderá considerar essa instância especificada corretamente. Portanto, se você tiver 10 destinos e seu erro de classificação em 7 deles estiver dentro do intervalo aceitável, você classificaria 70% dos dados corretamente.
Kiril
Qual é o critério de término exigido pelo seu professor?
Kiril

Respostas:

292

Os conjuntos de treinamento e validação são usados ​​durante o treinamento.

for each epoch
    for each training data instance
        propagate error through the network
        adjust the weights
        calculate the accuracy over training data
    for each validation data instance
        calculate the accuracy over the validation data
    if the threshold validation accuracy is met
        exit training
    else
        continue training

Depois de terminar o treinamento, você executa seu conjunto de testes e verifica se a precisão é suficiente.

Conjunto de treinamento : esse conjunto de dados é usado para ajustar os pesos na rede neural.

Conjunto de validação : esse conjunto de dados é usado para minimizar o ajuste excessivo. Você não está ajustando os pesos da rede com esse conjunto de dados, apenas está verificando se qualquer aumento na precisão do conjunto de dados de treinamento produz realmente um aumento na precisão de um conjunto de dados que não havia sido mostrado para a rede antes, ou pelo menos a rede não treinou (ou seja, conjunto de dados de validação). Se a precisão do conjunto de dados de treinamento aumenta, mas a precisão do conjunto de dados de validação permanece a mesma ou diminui, você está ajustando demais a sua rede neural e deve parar o treinamento.

Conjunto de testes : esse conjunto de dados é usado apenas para testar a solução final, a fim de confirmar o poder preditivo real da rede.

Kiril
fonte
seu python: xi apenas não pode obter um critério de parada .. os valores convergem .. mas sempre com alguma flutuação ..
Daniel
@ Daniel, a precisão do treinamento varia ou a precisão da validação? É possível que a precisão da validação flutue, mas é menos provável que a precisão do treinamento flutue. Quando você diz "input, target = p", significa que você está configurando ambos para p?
Kiril
Eu não sou muito bom com python, então o código parece um pouco confuso para mim ... em geral, você deseja interromper o treinamento quando a precisão da validação atingir um determinado limite, digamos 70% ou 90%, o que fizer sentido para o domínio dos seus dados.
Kiril
5
O conjunto de validação é usado no processo de treinamento. Conjunto de teste não é. O conjunto de testes permite 1) verificar se o conjunto de treinamento foi suficiente e 2) se o conjunto de validação fez o trabalho de impedir o ajuste excessivo. Se você usar o conjunto de testes no processo de treinamento, será apenas mais um conjunto de validação e não mostrará o que acontece quando novos dados são alimentados na rede.
Anton Andreev 10/10
2
@AntonAndreev Eu não entendo. De acordo com sua resposta, nem o validation setnem o test setsão usados ​​para ajustar os pesos da rede neural. Por que você não pode usar o mesmo conjunto de dados, não usado para treinar pesos, como validation sete test set? O que é ganho mantendo-os separados?
Gili
77

Conjunto de treinamento : um conjunto de exemplos usados ​​para o aprendizado, que serve para ajustar os parâmetros [ou seja, pesos] do classificador.

Conjunto de validação : um conjunto de exemplos usados ​​para ajustar os parâmetros [ou seja, arquitetura, não pesos] de um classificador, por exemplo, para escolher o número de unidades ocultas em uma rede neural.

Conjunto de teste : um conjunto de exemplos usados ​​apenas para avaliar o desempenho [generalização] de um classificador totalmente especificado.

Na seção ftp://ftp.sas.com/pub/neural/FAQ1.txt " Qual é a população, amostra, conjunto de treinamento, conjunto de design, validação "

A superfície do erro será diferente para diferentes conjuntos de dados do seu conjunto de dados (aprendizado em lote). Portanto, se você encontrar um mínimo local muito bom para os dados do seu conjunto de testes, esse pode não ser um ponto muito bom e pode ser um ponto muito ruim na superfície gerada por outro conjunto de dados para o mesmo problema. Portanto, você precisa calcular um modelo que não apenas encontre uma boa configuração de peso para o conjunto de treinamento, mas também seja capaz de prever novos dados (que não estão no conjunto de treinamento) com um bom erro. Em outras palavras, a rede deve ser capaz de generalizar os exemplos para que ela aprenda os dados e não se lembre ou carregue simplesmente o conjunto de treinamento sobregravando os dados de treinamento.

O conjunto de dados de validação é um conjunto de dados para a função que você deseja aprender e que não está usando diretamente para treinar a rede. Você está treinando a rede com um conjunto de dados que você chama de conjunto de dados de treinamento. Se você estiver usando um algoritmo baseado em gradiente para treinar a rede, a superfície de erro e o gradiente em algum momento dependerão completamente do conjunto de dados de treinamento, portanto, o conjunto de dados de treinamento será usado diretamente para ajustar os pesos. Para garantir que você não ajuste demais a rede, insira o conjunto de dados de validação na rede e verifique se o erro está dentro de um intervalo. Como o conjunto de validação não está sendo usado diretamente para ajustar os pesos da rede, portanto, um bom erro para a validação e também o conjunto de testes indica que a rede prevê bem os exemplos do conjunto de trens,

A parada precoce é uma maneira de parar o treinamento. Existem diferentes variações disponíveis, o esquema principal é que os erros do trem e do conjunto de validação são monitorados, o erro do trem diminui a cada iteração (backprop e irmãos) e, a princípio, o erro de validação diminui. O treinamento é interrompido no momento em que o erro de validação começa a aumentar. A configuração de peso neste momento indica um modelo que prediz bem os dados de treinamento, bem como os dados que não são vistos pela rede . Mas porque os dados de validação realmenteafeta a configuração de peso indiretamente para selecionar a configuração de peso. É aqui que o conjunto de testes entra. Esse conjunto de dados nunca é usado no processo de treinamento. Depois que um modelo é selecionado com base no conjunto de validação, os dados do conjunto de testes são aplicados no modelo de rede e o erro para esse conjunto é encontrado. Este erro é um representante do erro que podemos esperar de dados absolutamente novos para o mesmo problema.

EDITAR:

Além disso, no caso de você não possuir dados suficientes para um conjunto de validação, é possível usar a validação cruzada para ajustar os parâmetros e estimar o erro de teste.

phoxis
fonte
11
Eu sei que eu não devo postar comentários sem sentido como este, mas queria te dizer que eu aprecio esta resposta muito :)
Llamageddon
6

O conjunto de validação cruzada é usado para a seleção do modelo; por exemplo, selecione o modelo polinomial com a menor quantidade de erros para um determinado conjunto de parâmetros. O conjunto de testes é usado para relatar o erro de generalização no modelo selecionado. A partir daqui: https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets

user2410953
fonte
1
Também vou às aulas de Andrew Ng e concordo com você. O conjunto de validação deve fazer parte do treinamento. Só deve ser usado para girar hiperparâmetros.
Jack Peng #
4

Criamos um conjunto de validação para

  • Meça quão bem um modelo generaliza, durante o treinamento
  • Diga-nos quando parar de treinar um modelo; quando a perda de validação parar de diminuir (e principalmente quando a perda de validação começar a aumentar e a perda de treinamento ainda estiver diminuindo)

Por que conjunto de validação usado :

Por que conjunto de validação usado

Nil Akash
fonte
2

Digamos que você treina um modelo em um conjunto de treinamento e mede seu desempenho em um conjunto de teste. Você acha que ainda há espaço para melhorias e tenta ajustar os hiperparâmetros (se o modelo for uma rede neural - os hiperparâmetros são o número de camadas ou nós nas camadas). Agora você obtém um desempenho um pouco melhor. No entanto, quando o modelo é submetido a outros dados (não no conjunto de testes e treinamento), você pode não obter o mesmo nível de precisão. Isso ocorre porque você introduziu algum viés ao ajustar os hiperparâmetros para obter melhor precisão no conjunto de testes. Basicamente, você adaptou o modelo e os hiperparâmetros para produzir o melhor modelo para esse conjunto de treinamento específico.

Uma solução comum é dividir ainda mais o conjunto de treinamento para criar um conjunto de validação . Agora você tem

  • conjunto de treinamento
  • conjunto de teste
  • conjunto de validação

Você continua como antes, mas desta vez utiliza o conjunto de validação para testar o desempenho e ajustar os hiperparâmetros. Mais especificamente, você treina vários modelos com vários hiperparâmetros no conjunto de treinamento reduzido (ou seja, o conjunto de treinamento completo menos o conjunto de validação) e seleciona o modelo que apresenta melhor desempenho no conjunto de validação.

Depois de selecionar o modelo de melhor desempenho no conjunto de validação, você treina o melhor modelo no conjunto de treinamento completo (incluindo o conjunto de validação), e isso fornece o modelo final.

Por fim, você avalia esse modelo final no conjunto de testes para obter uma estimativa do erro de generalização.

Aditya
fonte
0

Conjunto de dados de treinamento : a amostra de dados usada para ajustar o modelo.

Conjunto de dados de validação : a amostra de dados usada para fornecer uma avaliação imparcial de um ajuste de modelo no conjunto de dados de treinamento ao ajustar os hiperparâmetros do modelo. A avaliação se torna mais tendenciosa à medida que a habilidade no conjunto de dados de validação é incorporada na configuração do modelo.

Conjunto de dados de teste : a amostra de dados usada para fornecer uma avaliação imparcial de um ajuste final do modelo no conjunto de dados de treinamento.

Farzana Khan
fonte
-15

Em palavras simples, defina Conjunto de treinamento, Conjunto de teste, Conjunto de validação

Conjunto de treinamento: É usado para encontrar vizinhos mais próximos. Conjunto de validação: é para encontrar k diferente que está sendo aplicado ao conjunto de trens. Conjunto de teste: É usado para encontrar a precisão máxima e dados invisíveis no futuro.

Gaurav Pal
fonte