在上一节视频中 我们学习了
为什么开发集和测试集应该具有相同的分布
但这些数据集应该有多大呢
建立开发集和测试集的方式
随着深度学习时代的到来而发生着变化
让我们来看一些最佳实践
你也许听说过机器学习中的一条经验法则
那就是将你拥有的所有数据
按照70/30的比例 分割成训练集和测试集
如果需要建立训练集 开发集和测试集
可以将60%的数据作为训练集 20%作为开发集 20%作为测试集
在早期的机器学习时代
这曾经是非常合理的做法
尤其是在数据规模不大的时候
如果你总共只有几百个样例
使用70/30或60/20/20的经验法则是非常合理的
如果你有几千个样例
或者上万个样例
这些比例也是合理的
但是在现代机器学习中
我们往往需要处理更大量的数据
假如你有100万个训练样例
那么一种合理的做法是
使用98%的数据作为训练集
1%作为开发集 1%作为测试集
这里我用D和T分别表示开发(Dev)和测试(Test)集
如果你有一百万个样例
那么其中的1%就已经有
1万个样例了 这对开发集或测试集来说已经足够了
在现代的深度学习中 我们拥有更大量的数据
因此使用远小于20%或30%的数据
作为开发集或测试集是非常合理的
而且因为深度学习算法极度需要数据
在拥有大量数据的问题中
训练集会占有更高的比例
那么 测试集应该多大呢
测试集的作用
是在系统开发完成后
帮我们评估最终系统的性能
因此 测试集的大小只要足够能
保证对系统整体性能评估的高置信度即可
因此 除非你需要
对最终系统性能有非常精确的测量
否则你的测试集并不需要上百万个样例
或许你认为1万个样例就可以
提供足够的置信度来评估性能 或者也可能
需要10万个或更多才够
这个数目可能远小于
总数据量的30%
这取决于你所拥有的总数据量
在某些应用场景中
可能你并不需要对最终系统 整体性能的评估具有很高的置信度
也许你只需要训练集和开发集
那么我认为没有测试集也是可以的
事实上 有时候人们说
他们划分了训练集和测试集
但实际上 却是在测试集上进行迭代
因此并不存在测试集
他们只是划分了训练集和开发集 没有测试集
如果在这个数据集上进行调优
那么将这个所谓的测试集
称为开发集会更加合适
不过我认为在机器学习的历史中
并不是每个人都能区分清楚
有时候所谓的测试集 实际上是开发集
但如果我们只关心有用于训练的数据
和用于调优的数据
然后直接上线最终的系统
而不太关心它的实际性能
我认为也可以只使用训练集和开发集
而不使用测试集
这听起来有点反常
我绝对不是在建议大家在开发系统时舍弃测试集
我觉得有一个单独的测试集会更安心
你可以在上线前使用测试集得到对系统性能的无偏估计
但是如果你有一个很大的开发集
你相信不会对开发集过拟合得太厉害
那么只使用训练集和开发集 也不是完全不合理
不过我一般不建议这样做
总的来说 在大数据时代
我认为传统的70/30法则
已经不再适用了
现在的趋势是 使用更多数据作为训练集 使用较少的数据作为开发集和测试集
尤其是当你的数据集很大的时候
经验法则是 确保开发集的大小足以达到其目的
也就是帮我们评估不同的想法 让我们能更好地从A或B中做出选择
而测试集的目的 是对最终的分类器进行评估
你只需要让测试集的大小足以满足这一目的即可
这可能远小于总数据量的30%
我希望以上内容能给你一些指导和建议
帮你在深度学习时代建立开发集和测试集
接下来 我们有的时候会
在解决一个机器学习的问题的中途
想要更改你的评价指标
或者更改你的开发集和测试集
让我们讨论一下什么时候需要这么做