Estoy usando esta biblioteca para implementar un agente de aprendizaje.
He generado los casos de capacitación, pero no estoy seguro de cuáles son los conjuntos de validación y prueba.
El profesor dice:
El 70% deben ser casos de entrenamiento, el 10% serán casos de prueba y el 20% restante serán casos de validación.
editar
Tengo este código para entrenar, pero no tengo idea de cuándo dejar de entrenar.
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
Puedo obtener un error promedio de 0.2 con los datos de validación, después de quizás 20 iteraciones de entrenamiento, ¿eso debería ser 80%?
error promedio = suma de la diferencia absoluta entre el objetivo de validación y la salida, dada la entrada de datos de validación / tamaño de los datos de validación.
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
Respuestas:
Los conjuntos de entrenamiento y validación se utilizan durante el entrenamiento.
Una vez que haya terminado el entrenamiento, corre contra su conjunto de pruebas y verifica que la precisión sea suficiente.
Conjunto de entrenamiento : este conjunto de datos se utiliza para ajustar los pesos en la red neuronal.
Conjunto de validación : este conjunto de datos se utiliza para minimizar el sobreajuste. No está ajustando los pesos de la red con este conjunto de datos, solo está verificando que cualquier aumento en la precisión sobre el conjunto de datos de entrenamiento realmente produce un aumento en la precisión sobre un conjunto de datos que no se ha mostrado a la red antes, o al menos la red no se ha entrenado en él (es decir, conjunto de datos de validación). Si la precisión sobre el conjunto de datos de entrenamiento aumenta, pero la precisión sobre el conjunto de datos de validación permanece igual o disminuye, entonces está sobreajustando su red neuronal y debe dejar de entrenar.
Conjunto de prueba : este conjunto de datos se usa solo para probar la solución final para confirmar el poder predictivo real de la red.
fuente
validation set
ni eltest set
se utilizan para ajustar los pesos de la red neuronal. ¿Por qué no puede usar el mismo conjunto de datos, no usado para entrenar los pesos, como elvalidation set
ytest set
? ¿Qué se gana al mantenerlos separados?De ftp://ftp.sas.com/pub/neural/FAQ1.txt sección " ¿Cuáles son la población, muestra, conjunto de capacitación, conjunto de diseño, validación "?
La superficie de error será diferente para diferentes conjuntos de datos de su conjunto de datos (aprendizaje por lotes). Por lo tanto, si encuentra un mínimo local muy bueno para los datos de su conjunto de pruebas, puede que ese no sea un punto muy bueno, y puede ser un punto muy malo en la superficie generado por algún otro conjunto de datos para el mismo problema. Por lo tanto, debe calcular un modelo de este tipo que no solo encuentre una buena configuración de peso para el conjunto de entrenamiento, sino que también pueda predecir nuevos datos (que no están en el conjunto de entrenamiento) con un buen error. En otras palabras, la red debería poder generalizar los ejemplos para que aprenda los datos y no simplemente recuerde o cargue el conjunto de entrenamiento al sobreajustar los datos de entrenamiento.
El conjunto de datos de validación es un conjunto de datos para la función que desea aprender, que no está utilizando directamente para entrenar la red. Está entrenando a la red con un conjunto de datos que llama el conjunto de datos de entrenamiento. Si está utilizando un algoritmo basado en gradiente para entrenar la red, entonces la superficie de error y el gradiente en algún punto dependerán completamente del conjunto de datos de entrenamiento, por lo tanto, el conjunto de datos de entrenamiento se está utilizando directamente para ajustar los pesos. Para asegurarse de no sobreajustar la red, debe ingresar el conjunto de datos de validación a la red y verificar si el error está dentro de algún rango. Debido a que el conjunto de validación no se está utilizando directamente para ajustar los pesos de la red, por lo tanto, un buen error para la validación y también el conjunto de prueba indica que la red predice bien para los ejemplos del conjunto de trenes,
Parar temprano es una forma de dejar de entrenar. Hay diferentes variaciones disponibles, el esquema principal es, tanto el tren como los errores del conjunto de validación son monitoreados, el error del tren disminuye en cada iteración (backprop y hermanos) y al principio disminuye el error de validación. El entrenamiento se detiene en el momento en que el error de validación comienza a aumentar. La configuración de peso en este punto indica un modelo, que predice bien los datos de entrenamiento, así como los datos que la red no ve . Pero porque los datos de validación en realidadafecta la configuración de peso indirectamente para seleccionar la configuración de peso. Aquí es donde entra el conjunto de prueba. Este conjunto de datos nunca se utiliza en el proceso de capacitación. Una vez que se selecciona un modelo basado en el conjunto de validación, los datos del conjunto de prueba se aplican al modelo de red y se encuentra el error para este conjunto. Este error es un representante del error que podemos esperar de datos absolutamente nuevos para el mismo problema.
EDITAR:
Además, en el caso de que no tenga suficientes datos para un conjunto de validación, puede usar la validación cruzada para ajustar los parámetros y estimar el error de prueba.
fuente
El conjunto de validación cruzada se utiliza para la selección del modelo, por ejemplo, seleccione el modelo polinómico con la menor cantidad de errores para un conjunto de parámetros dado. El conjunto de prueba se utiliza para informar el error de generalización en el modelo seleccionado. Desde aquí: https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets
fuente
Creamos un conjunto de validación para
Por qué se utiliza el conjunto de validación :
fuente
Supongamos que entrena un modelo en un conjunto de entrenamiento y luego mide su rendimiento en un conjunto de prueba. Cree que todavía hay margen de mejora e intenta ajustar los hiperparámetros (si el modelo es una red neuronal, los hiperparámetros son el número de capas o nodos en las capas). Ahora obtienes un rendimiento ligeramente mejor. Sin embargo, cuando el modelo está sujeto a otros datos (no en el conjunto de pruebas y entrenamiento), es posible que no obtenga el mismo nivel de precisión. Esto se debe a que introdujo algunos sesgos al ajustar los hiperparámetros para obtener una mayor precisión en el conjunto de pruebas. Básicamente, ha adaptado el modelo y los hiperparámetros para producir el mejor modelo para ese conjunto de entrenamiento en particular.
Una solución común es dividir aún más el conjunto de entrenamiento para crear un conjunto de validación . Ahora tu tienes
Continúa como antes, pero esta vez usa el conjunto de validación para probar el rendimiento y ajustar los hiperparámetros. Más específicamente, entrena múltiples modelos con varios hiperparámetros en el conjunto de entrenamiento reducido (es decir, el conjunto de entrenamiento completo menos el conjunto de validación), y selecciona el modelo que funciona mejor en el conjunto de validación.
Una vez que haya seleccionado el modelo con mejor rendimiento en el conjunto de validación, entrena el mejor modelo en el conjunto de entrenamiento completo (incluido el conjunto de validación), y esto le da el modelo final.
Por último, evalúa este modelo final en el conjunto de pruebas para obtener una estimación del error de generalización.
fuente
Conjunto de datos de entrenamiento : la muestra de datos utilizada para ajustarse al modelo.
Conjunto de datos de validación : la muestra de datos utilizada para proporcionar una evaluación imparcial de un modelo ajustado en el conjunto de datos de entrenamiento mientras se ajustan los hiperparámetros del modelo. La evaluación se vuelve más sesgada a medida que la habilidad en el conjunto de datos de validación se incorpora a la configuración del modelo.
Conjunto de datos de prueba : la muestra de datos utilizada para proporcionar una evaluación imparcial de un ajuste final del modelo en el conjunto de datos de entrenamiento.
fuente
En palabras simples, defina Conjunto de entrenamiento, Conjunto de prueba, Conjunto de validación
Conjunto de entrenamiento: se utiliza para encontrar vecinos más cercanos. Conjunto de validación: es para encontrar diferentes k que se aplican al conjunto de trenes. Conjunto de prueba: se utiliza para encontrar la máxima precisión y datos invisibles en el futuro.
fuente