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
Respostas:
Os conjuntos de treinamento e validação são usados durante o treinamento.
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.
fonte
validation set
nem otest set
sã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, comovalidation set
etest set
? O que é ganho mantendo-os separados?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.
fonte
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
fonte
Criamos um conjunto de validação para
Por que conjunto de validação usado :
fonte
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
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.
fonte
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.
fonte
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.
fonte