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