是否有关于如何将数据集划分为训练集和验证集的经验法则?
machine-learning
5
0

是否有关于如何将数据最佳地分为训练和验证集的经验法则?建议采用50/50的均分方式吗?还是相对于验证数据,拥有更多的训练数据是否有明显的优势(反之亦然)?还是这个选择几乎取决于应用程序?

我主要分别使用了80%/ 20%的训练和验证数据,但是我选择该部门时没有任何原则性的理由。能在机器学习方面有更多经验的人可以给我建议吗?

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

去年,我参加了Andrew Ng教授的在线机器学习课程。他的建议是:

培训 :60%

交叉验证 :20%

测试 :20%

收藏
评论

好吧,您应该再考虑一件事。

如果您拥有非常大的数据集(例如1,000,000个示例),则可能不需要拆分80/10/10,因为无需10%= 100,000个示例就可以证明模型可以正常工作。

也许99 / 0.5 / 0.5就足够了,因为5,000个示例可以代表大多数数据差异,并且基于测试和开发中的这5,000个示例,您可以很容易地看出模型运行良好。

收藏
评论

存在两个相互竞争的问题:训练数据越少,参数估计值的方差就越大。使用更少的测试数据,您的性能统计数据将具有更大的差异。广义上讲,您应该关注数据的划分,以确保方差都不会太大,这更多地取决于每个类别中实例的绝对数量而不是百分比。

如果您总共有100个实例,那么您可能会被交叉验证所困扰,因为没有任何拆分会给您估计值带来令人满意的差异。如果您有100,000个实例,则选择80:20拆分还是90:10拆分实际上并没有关系(实际上,如果您的方法特别需要计算,则可以选择使用较少的训练数据)。

假设您有足够的数据来执行适当的保留测试数据(而不是交叉验证),那么以下方法是一种指导性方法来处理差异:

  1. 将您的数据分为训练和测试(80/20的确是一个不错的起点)
  2. 训练数据分为训练和验证(同样,80/20是公平的划分)。
  3. 对训练数据的随机选择进行子采样,使用此训练分类器,并在验证集上记录效果
  4. 尝试使用不同数量的训练数据进行一系列运行:随机抽取20%的数据(例如10次)并观察验证数据的效果,然后对40%,60%,80%进行相同的操作。您应该看到更多的数据带来更高的性能,而且不同随机样本之间的方差也更低
  5. 要处理由于测试数据的大小而引起的差异,请反向执行相同的过程。对所有训练数据进行训练,然后多次随机抽样一定百分比的验证数据,并观察性能。现在,您应该发现小量验证数据样本的平均性能与所有验证数据的性能大致相同,但是对于较少数量的测试样本,方差要大得多。
收藏
评论

您会惊讶地发现80/20是相当普遍的比率,通常称为帕累托原理 。如果使用该比率,通常是一个安全的选择。

但是,根据您采用的培训/验证方法,比率可能会发生变化。例如:如果您使用10倍交叉验证,那么最终您将得到每折叠10%的验证集。

已经对训练集和验证集之间的适当比例进行了一些研究:

为验证集保留的模式比例应与自由可调参数数量的平方根成反比。

他们在结论中指定了一个公式:

验证集(v)与训练集(t)大小之比v / t,类似于ln(N / h-max),其中N是识别器族的数量,h-max是这些族的最大复杂度。

它们所谓的复杂性是:

识别器的每个系列都以其复杂性为特征,该复杂性可能与VC维度 ,描述长度,可调参数的数量或其他复杂性度量无关。

遵循第一个经验法则(即验证集应与自由可调整参数的数量的平方根成反比),可以得出结论,如果您有32个可调整参数,则32的平方根为〜5.65,分数应为1 / 5.65或0.177(v / t)。应该保留大约17.7%的资源用于验证,保留82.3%的资源用于培训。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号