我正在使用这个库来实现学习代理.
我已经生成了培训案例,但我不确定验证和测试集是什么.
老师说:
70%应该是培训案例,10%是测试案例,其余20%应该是验证案例.
编辑
我有这个训练代码,但我不知道何时停止训练.
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
编辑
在经过20次训练迭代后,验证数据可以得到平均误差0.2,应该是80%?
平均误差=验证目标和输出之间的绝对差值之和,给定验证数据输入/验证数据的大小.
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
Kiril.. 265
训练期间使用训练和验证集.
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
完成培训后,您将对抗测试集并验证准确性是否足够.
训练集:该数据集用于调整神经网络上的权重.
验证集:此数据集用于最小化过度拟合.您没有使用此数据集调整网络的权重,您只是验证训练数据集的准确度的任何提高实际上都会提高准确性,而不是之前未向网络显示的数据集,或者至少网络没有接受过培训(即验证数据集).如果训练数据集的准确度增加,但验证数据集的准确度保持不变或降低,则您的神经网络过度拟合,应该停止训练.
测试集:此数据集仅用于测试最终解决方案,以确认网络的实际预测能力.
训练期间使用训练和验证集.
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
完成培训后,您将对抗测试集并验证准确性是否足够.
训练集:该数据集用于调整神经网络上的权重.
验证集:此数据集用于最小化过度拟合.您没有使用此数据集调整网络的权重,您只是验证训练数据集的准确度的任何提高实际上都会提高准确性,而不是之前未向网络显示的数据集,或者至少网络没有接受过培训(即验证数据集).如果训练数据集的准确度增加,但验证数据集的准确度保持不变或降低,则您的神经网络过度拟合,应该停止训练.
测试集:此数据集仅用于测试最终解决方案,以确认网络的实际预测能力.
训练集:用于学习的一组示例,即拟合分类器的参数[即权重].
验证集:用于调整分类器的参数[即架构,而不是权重]的一组示例,例如用于选择神经网络中的隐藏单元的数量.
测试集:一组示例,仅用于评估完全指定的分类器的性能[泛化].
从ftp://ftp.sas.com/pub/neural/FAQ1.txt部分" 什么是人口,样本,训练集,设计集,验证 "
对于数据集中的不同数据集,错误表面将不同(批量学习).因此,如果您为测试集数据找到了非常好的局部最小值,这可能不是一个非常好的点,并且可能是由同一问题的一些其他数据集生成的表面中的非常糟糕的点.因此,您需要计算这样一个模型,该模型不仅能够找到训练集的良好权重配置,而且还能够预测出具有良好误差的新数据(不在训练集中).换句话说,网络应该能够概括示例,以便它学习数据,而不是简单地通过过度拟合训练数据来记住或加载训练集.
验证数据集是您要学习的功能的一组数据,您不直接用于训练网络.您正在使用一组数据训练网络,您可以将其称为训练数据集.如果您使用基于梯度的算法训练网络,那么错误表面和某些点的梯度将完全取决于训练数据集,因此训练数据集直接用于调整权重.为确保不会过度使用网络,您需要将验证数据集输入网络并检查错误是否在某个范围内.因为验证集没有直接用于调整netowork的权重,因此验证和测试集的良好错误表明网络预测了列车集示例,
提前停止是一种停止训练的方法.有不同的变化可用,主要概述是,列车和验证集错误都被监控,列车错误在每次迭代时减少(backprop和兄弟),并且首先验证错误减少.在验证错误开始上升时停止训练.此时的权重配置表示模型,该模型可以很好地预测训练数据,以及网络未看到的数据.但实际上是因为验证数据间接影响重量配置以选择重量配置.这就是测试集的用武之地.这组数据从未在训练过程中使用过.一旦基于验证集选择了模型,就将测试集数据应用于网络模型,并找到该集的错误.此错误代表了我们可以从同一问题的绝对新数据中获得的错误.
编辑:
此外,如果您没有足够的数据用于验证集,则可以使用交叉验证来调整参数以及估计测试错误.
交叉验证集用于模型选择,例如,为给定参数集选择具有最小误差量的多项式模型.然后使用测试集报告所选模型的泛化错误.从这里:https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets