我正在使用this library来实施学习代理。
我已经生成了培训案例,但我不确定验证和测试集是什么 老师说:
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
修改的
我可以使用验证数据获得0.2的平均误差,经过20次训练迭代后,应该是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
答案 0 :(得分:242)
培训期间使用培训和验证集。
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
完成培训后,您将对抗测试集并验证其准确性是否足够。
训练集:此数据集用于调整神经网络的权重。
验证集:此数据集用于最大限度地减少过度拟合。您没有使用此数据集调整网络的权重,您只是验证训练数据集的准确度的任何提高实际上都会比以前未向网络显示的数据集提高准确度,或者至少网络没有接受过培训(即验证数据集)。如果训练数据集的准确度增加,但验证数据集的准确度保持不变或降低,则您的神经网络过度拟合,应该停止训练。
测试集:此数据集仅用于测试最终解决方案,以确认网络的实际预测能力。
答案 1 :(得分:65)
训练集:一组用于学习的示例,即适合 分类器的参数[即权重]。
验证集: 用于调整分类器的参数[即架构,而不是权重]的一组示例,例如用于选择神经网络中隐藏单元的数量。
测试集: 一组示例仅用于评估完全指定的分类器的性能[泛化]。
来自ftp://ftp.sas.com/pub/neural/FAQ1.txt部分什么是人口,样本,培训集,设计集,验证“
对于数据集中的不同数据集(批量学习),错误曲面将有所不同。因此,如果您为测试集数据找到了非常好的局部最小值,这可能不是一个非常好的点,并且可能是由同一问题的一些其他数据集生成的表面中的非常糟糕的点。因此,您需要计算这样一个模型,该模型不仅能够找到训练集的良好权重配置,而且还能够预测出具有良好误差的新数据(不在训练集中)。换句话说,网络应该能够概括示例,以便学习数据,而不是简单地通过过度拟合训练数据来记住或加载训练集。
验证数据集是您要学习的功能的一组数据,您不直接使用它来训练网络。您正在使用一组数据训练网络,您可以将其称为训练数据集。如果您使用基于梯度的算法训练网络,那么错误表面和某些点的梯度将完全取决于训练数据集,因此训练数据集直接用于调整权重。为确保不会过度使用网络,您需要将验证数据集输入网络并检查错误是否在某个范围内。由于验证集没有直接用于调整netowork的权重,因此验证和测试集的良好错误表明网络预测列车集示例,并且预计在新的时候表现良好示例呈现给网络,但未在培训过程中使用。
提前停止是一种停止训练的方法。有不同的变化可用,主要概述是,列车和验证集错误都被监控,列车错误在每次迭代时减少(backprop和兄弟),并且首先验证错误减少。在验证错误开始上升时停止训练。此时的权重配置表示一个模型,它可以很好地预测训练数据,以及网络未看到的数据 。但是因为验证数据实际间接影响权重配置以选择权重配置。这就是测试集的用武之地。这组数据从未在训练过程中使用过。基于验证集选择模型后,将测试集数据应用于网络模型,并找到该集的错误。此错误代表了我们可以从同一问题的绝对新数据中获得的错误。
编辑:
此外,如果您没有足够的数据用于验证集,则可以使用crossvalidation调整参数以及估计测试错误。
答案 2 :(得分:6)
交叉验证集用于模型选择,例如,为给定参数集选择具有最小误差量的多项式模型。然后使用测试集报告所选模型的泛化错误。从这里开始:https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets
答案 3 :(得分:5)
我们创建一个验证集
为什么使用验证集:
答案 4 :(得分:2)
假设您在训练集中训练模型,然后在测试集中测量模型的性能。您认为仍有改进的空间,请尝试调整超参数(如果模型是神经网络-超参数是层数或层中的节点)。现在,您可以获得更好的性能。但是,当模型接受其他数据(不在测试和训练集中)时,您可能无法获得相同水平的准确性。这是因为您在调整超参数时引入了一些偏差,以在测试集上获得更好的精度。您基本上已经调整了模型和超参数,以针对该特定训练集生成最佳模型。
一个常见的解决方案是将训练集进一步划分为一个验证集。现在你有
您可以像以前一样进行操作,但是这次您使用验证集来测试性能并调整超参数。更具体地说,您可以在精简训练集(即完整训练集减去验证集)上训练具有各种超参数的多个模型,然后选择在验证集上表现最佳的模型。
一旦您在验证集上选择了效果最好的模型,就可以在整个训练集上(包括验证集- 设置),这将为您提供最终的模型。
最后,您在测试集上评估此最终模型,以获得对泛化误差的估计。
答案 5 :(得分:0)
训练数据集:用于拟合模型的数据样本。
验证数据集:用于在调整模型超参数时对训练数据集上的模型拟合进行无偏评估的数据样本。随着验证数据集技能被整合到模型配置中,评估变得更加有偏见。
测试数据集:用于对训练数据集上的最终模型拟合进行无偏评估的数据样本。
答案 6 :(得分:0)
训练数据用于更新权重。如果我们谈论简单的多层感知器神经网络,权重会在反向传播过程中根据训练数据的误差进行更新。
验证数据用于检查模型的过拟合。它也用作训练的停止标准。 Keras 中的不同回调取决于验证数据。例如,我们可以根据验证数据设置提前停止。我们总是在验证数据的训练过程中检查模型的准确性。
测试数据与训练过程无关。保存训练好的模型后,使用测试数据来检查模型在未见数据上的性能。
答案 7 :(得分:-2)
训练集:用于查找最近的邻居。 验证集:用于找到应用于训练集的不同k。 测试集:用于寻找最大的准确性和将来看不见的数据。